From 990797e6b107437549aa02a3de9f412f62344f3e Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Tue, 13 Oct 2020 16:20:13 +0800 Subject: [PATCH 01/27] =?UTF-8?q?=E9=A6=96=E9=A1=B5tag=E6=9B=B4=E6=94=B9?= =?UTF-8?q?=20=E4=BB=A5=E5=8F=8A=E6=96=B0=E5=A2=9E=E5=BA=97=E9=93=BA?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Constants/v3/Tabs.php | 5 +++++ app/Controller/v3/StoreController.php | 9 +++++++++ app/Service/v3/Implementations/StoreService.php | 8 ++++++++ app/Service/v3/Implementations/TabsService.php | 3 ++- app/Service/v3/Interfaces/StoreServiceInterface.php | 1 + config/routes.php | 1 + 6 files changed, 26 insertions(+), 1 deletion(-) diff --git a/app/Constants/v3/Tabs.php b/app/Constants/v3/Tabs.php index 0b95a4f..3866285 100644 --- a/app/Constants/v3/Tabs.php +++ b/app/Constants/v3/Tabs.php @@ -30,6 +30,11 @@ class Tabs extends AbstractConstants */ const APPLET_INDEX_OFFICE = 'applet_index_office'; + /** + * @Message("小程序首页店铺列表") + */ + const APPLET_INDEX_STORE = 'applet_index_store'; + /** * @Message("搜索商品为你推荐") */ diff --git a/app/Controller/v3/StoreController.php b/app/Controller/v3/StoreController.php index 8a883f7..11edf2d 100644 --- a/app/Controller/v3/StoreController.php +++ b/app/Controller/v3/StoreController.php @@ -123,4 +123,13 @@ class StoreController extends BaseController $res = $data['goods_types'] = $this->categoryService->allForStoreIncludeOff($storeId); return $this->success(['goods_types' => $res]); } + + public function getListByMarketId() + { + $marketId = $this->request->input('market_id'); + $page = $this->request->input('page',1); + $pagesize = $this->request->input('pagesize',10); + $res = $this->storeService->getListByMarketId($marketId,$page,$pagesize); + return $this->success($res); + } } \ No newline at end of file diff --git a/app/Service/v3/Implementations/StoreService.php b/app/Service/v3/Implementations/StoreService.php index 2269faf..f162efe 100644 --- a/app/Service/v3/Implementations/StoreService.php +++ b/app/Service/v3/Implementations/StoreService.php @@ -63,4 +63,12 @@ class StoreService implements StoreServiceInterface $market->stores = $stores['data']; return ['has_more_pages' => $paginate->hasMorePages(), 'market' => $market]; } + + public function getListByMarketId($marketId, $page=1, $pagesize=10) + { + $builder = Store::query(); + $paginate = $builder->where('market_id',$marketId)->paginate($pagesize); + $storeList = $paginate->toArray(); + return ['has_more_pages' => $paginate->hasMorePages(), 'store_list' => $storeList['data']]; + } } \ No newline at end of file diff --git a/app/Service/v3/Implementations/TabsService.php b/app/Service/v3/Implementations/TabsService.php index 1c58f98..f662be3 100644 --- a/app/Service/v3/Implementations/TabsService.php +++ b/app/Service/v3/Implementations/TabsService.php @@ -26,10 +26,11 @@ class TabsService implements TabsServiceInterface public function allForAppletIndex() { return [ + ['tab' => Tabs::APPLET_INDEX_STORE, 'title' => '店铺列表', 'subtitle' => '点我进列表', 'badge' => '好多店铺', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], ['tab' => Tabs::APPLET_INDEX_RECOMMEND, 'title' => '猜你喜欢', 'subtitle' => '我是你的菜', 'badge' => '', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], ['tab' => Tabs::APPLET_INDEX_NEW, 'title' => '每日上新', 'subtitle' => '新鲜当日达', 'badge' => '好新鲜', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], ['tab' => Tabs::APPLET_INDEX_FRESH, 'title' => '懒族优选', 'subtitle' => '发现不一样', 'badge' => '', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], - ['tab' => Tabs::APPLET_INDEX_OFFICE, 'title' => '白领餐食', 'subtitle' => '轻奢快手菜', 'badge' => '手到食来', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], + //['tab' => Tabs::APPLET_INDEX_OFFICE, 'title' => '白领餐食', 'subtitle' => '轻奢快手菜', 'badge' => '手到食来', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], ]; } } \ No newline at end of file diff --git a/app/Service/v3/Interfaces/StoreServiceInterface.php b/app/Service/v3/Interfaces/StoreServiceInterface.php index 7d355e9..4b03641 100644 --- a/app/Service/v3/Interfaces/StoreServiceInterface.php +++ b/app/Service/v3/Interfaces/StoreServiceInterface.php @@ -9,4 +9,5 @@ interface StoreServiceInterface public function undo(); public function detail($storeId); public function getList($marketId ,$page=1, $pagesize=10); + public function getListByMarketId($marketId ,$page=1, $pagesize=10); } \ No newline at end of file diff --git a/config/routes.php b/config/routes.php index ec068d8..66697cc 100644 --- a/config/routes.php +++ b/config/routes.php @@ -156,6 +156,7 @@ Router::addGroup('/v3/', function () { Router::post('store/getGoodsByType', 'App\Controller\v3\StoreController@getGoodsByType'); Router::post('goods/update', 'App\Controller\v3\GoodsController@update'); Router::post('store/getList', 'App\Controller\v3\StoreController@getList'); + Router::post('store/getListByMarketId', 'App\Controller\v3\StoreController@getListByMarketId'); Router::post('goods/info', 'App\Controller\v3\GoodsController@info'); Router::post('store/getCategory', 'App\Controller\v3\StoreController@getCategory'); Router::post('category/first', 'App\Controller\v3\CategoryController@first'); From ffdfa6176c123d490b0e4f7f9edb0b3f7f994cec Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Tue, 13 Oct 2020 17:46:48 +0800 Subject: [PATCH 02/27] =?UTF-8?q?=E5=BA=97=E9=93=BA=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=95=86=E5=93=81=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Service/v3/Implementations/StoreService.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/Service/v3/Implementations/StoreService.php b/app/Service/v3/Implementations/StoreService.php index f162efe..ac6132c 100644 --- a/app/Service/v3/Implementations/StoreService.php +++ b/app/Service/v3/Implementations/StoreService.php @@ -67,7 +67,11 @@ class StoreService implements StoreServiceInterface public function getListByMarketId($marketId, $page=1, $pagesize=10) { $builder = Store::query(); - $paginate = $builder->where('market_id',$marketId)->paginate($pagesize); + $paginate = $builder->where('market_id',$marketId)->with(['goods' => function($query){ + $query->where(function ($query){ + $query->where('inventory', '>', 0)->orWhere('is_infinite', '=', 1); + }); + }])->orderByDesc('sales')->paginate($pagesize); $storeList = $paginate->toArray(); return ['has_more_pages' => $paginate->hasMorePages(), 'store_list' => $storeList['data']]; } From fb6d271b35019d3387414afc8746a8c0e002aba2 Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Tue, 13 Oct 2020 18:16:28 +0800 Subject: [PATCH 03/27] =?UTF-8?q?=E5=B8=82=E5=9C=BA=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v3/Implementations/StoreService.php | 44 +++++++++++++++---- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/app/Service/v3/Implementations/StoreService.php b/app/Service/v3/Implementations/StoreService.php index ac6132c..ffec425 100644 --- a/app/Service/v3/Implementations/StoreService.php +++ b/app/Service/v3/Implementations/StoreService.php @@ -3,9 +3,13 @@ namespace App\Service\v3\Implementations; +use App\Constants\v3\Goods as GoodsConstants; +use App\Constants\v3\Store as StoreConstants; use App\Model\v3\Market; use App\Model\v3\Store; +use App\Model\v3\Goods; use App\Service\v3\Interfaces\StoreServiceInterface; +use Hyperf\Utils\ApplicationContext; class StoreService implements StoreServiceInterface { @@ -66,13 +70,37 @@ class StoreService implements StoreServiceInterface public function getListByMarketId($marketId, $page=1, $pagesize=10) { - $builder = Store::query(); - $paginate = $builder->where('market_id',$marketId)->with(['goods' => function($query){ - $query->where(function ($query){ - $query->where('inventory', '>', 0)->orWhere('is_infinite', '=', 1); - }); - }])->orderByDesc('sales')->paginate($pagesize); - $storeList = $paginate->toArray(); - return ['has_more_pages' => $paginate->hasMorePages(), 'store_list' => $storeList['data']]; + $storeTable = ApplicationContext::getContainer()->get(Store::class)->getTable(); + $goodsTable = ApplicationContext::getContainer()->get(Goods::class)->getTable(); + + $builder = Store::query() + ->select(''.$storeTable.'.*') + ->join($goodsTable,''.$storeTable.'.id', '=', ''.$goodsTable.'.store_id') + ->where([''.$goodsTable.'.on_sale' => GoodsConstants::ON_SALE_YES]) + ->where([''.$goodsTable.'.market_id' => $marketId]) + ->where(function ($query) use ($goodsTable) { + $query->where(''.$goodsTable.'.inventory', '>', 0)->orWhere(''.$goodsTable.'.is_infinite', '=', 1); + }) + ->whereRaw(''.$goodsTable.'.deleted_at IS NULL') + ->where([''.$storeTable.'.market_id' => $marketId, ''.$storeTable.'.is_rest' => StoreConstants::IS_REST_NO]); + + if (isset($params['order_by']) && $params['order_by']) { + $sort = $params['sort'] ?? 'desc'; + switch ($params['order_by']) { + case 'sales': + $builder->orderBySales($sort); + break; + default: + $builder->orderByDefault($sort); + break; + } + } + $paginate = $builder->groupBy(''.$storeTable.'.id')->paginate($params['pagesize']); + $stores = $paginate->map(function ($item, $key) { + $item->goods; + return $item; + })->all(); + + return ['has_more_pages' => $paginate->hasMorePages(), 'stores' => $stores]; } } \ No newline at end of file From 8dd6905a19111bdb9d39fa96852196b59a71bba3 Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Wed, 14 Oct 2020 10:29:38 +0800 Subject: [PATCH 04/27] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=BA=97=E9=93=BA?= =?UTF-8?q?=E4=BC=91=E6=81=AF=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/v3/StoreController.php | 7 +++++++ app/Service/v3/Implementations/StoreService.php | 8 ++++++++ app/Service/v3/Interfaces/StoreServiceInterface.php | 1 + config/routes.php | 1 + 4 files changed, 17 insertions(+) diff --git a/app/Controller/v3/StoreController.php b/app/Controller/v3/StoreController.php index 11edf2d..7e21afd 100644 --- a/app/Controller/v3/StoreController.php +++ b/app/Controller/v3/StoreController.php @@ -132,4 +132,11 @@ class StoreController extends BaseController $res = $this->storeService->getListByMarketId($marketId,$page,$pagesize); return $this->success($res); } + + public function updateIsRest() + { + $storeId = $this->request->input('store_id'); + $res = $this->storeService->updateIsRest($storeId); + return $this->success($res); + } } \ No newline at end of file diff --git a/app/Service/v3/Implementations/StoreService.php b/app/Service/v3/Implementations/StoreService.php index ffec425..ed131dd 100644 --- a/app/Service/v3/Implementations/StoreService.php +++ b/app/Service/v3/Implementations/StoreService.php @@ -103,4 +103,12 @@ class StoreService implements StoreServiceInterface return ['has_more_pages' => $paginate->hasMorePages(), 'stores' => $stores]; } + + public function updateIsRest($storeId) + { + $store = Store::query()->withoutGlobalScope('normal')->find($storeId); + $isRest = $store->is_rest + 1; + $store->is_rest = $isRest % 2; + return $store->save(); + } } \ No newline at end of file diff --git a/app/Service/v3/Interfaces/StoreServiceInterface.php b/app/Service/v3/Interfaces/StoreServiceInterface.php index 4b03641..e8c79cd 100644 --- a/app/Service/v3/Interfaces/StoreServiceInterface.php +++ b/app/Service/v3/Interfaces/StoreServiceInterface.php @@ -10,4 +10,5 @@ interface StoreServiceInterface public function detail($storeId); public function getList($marketId ,$page=1, $pagesize=10); public function getListByMarketId($marketId ,$page=1, $pagesize=10); + public function updateIsRest($storeId); } \ No newline at end of file diff --git a/config/routes.php b/config/routes.php index 66697cc..53455dc 100644 --- a/config/routes.php +++ b/config/routes.php @@ -164,6 +164,7 @@ Router::addGroup('/v3/', function () { Router::post('category/third', 'App\Controller\v3\CategoryController@third'); Router::post('goods/create', 'App\Controller\v3\GoodsController@create'); Router::post('goods/updateOnSale', 'App\Controller\v3\GoodsController@updateOnSale'); + Router::post('store/updateIsRest', 'App\Controller\v3\StoreController@updateIsRest'); },['middleware' => [\App\Middleware\Auth\ApiMiddleware::class, \App\Middleware\Auth\UserMiddleware::class]]); // 微信支付回调 From b389445ec6ac0f7b834439193734eb6482443aa4 Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Wed, 14 Oct 2020 14:46:12 +0800 Subject: [PATCH 05/27] =?UTF-8?q?=E9=A6=96=E9=A1=B5=20=E5=BA=97=E9=93=BAta?= =?UTF-8?q?g=20=E6=96=87=E6=A1=88=E5=AE=9E=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Service/v3/Implementations/TabsService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Service/v3/Implementations/TabsService.php b/app/Service/v3/Implementations/TabsService.php index f662be3..7733fa1 100644 --- a/app/Service/v3/Implementations/TabsService.php +++ b/app/Service/v3/Implementations/TabsService.php @@ -26,7 +26,7 @@ class TabsService implements TabsServiceInterface public function allForAppletIndex() { return [ - ['tab' => Tabs::APPLET_INDEX_STORE, 'title' => '店铺列表', 'subtitle' => '点我进列表', 'badge' => '好多店铺', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], + ['tab' => Tabs::APPLET_INDEX_STORE, 'title' => '推荐店铺', 'subtitle' => '物美价廉', 'badge' => '', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], ['tab' => Tabs::APPLET_INDEX_RECOMMEND, 'title' => '猜你喜欢', 'subtitle' => '我是你的菜', 'badge' => '', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], ['tab' => Tabs::APPLET_INDEX_NEW, 'title' => '每日上新', 'subtitle' => '新鲜当日达', 'badge' => '好新鲜', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], ['tab' => Tabs::APPLET_INDEX_FRESH, 'title' => '懒族优选', 'subtitle' => '发现不一样', 'badge' => '', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], From 0f043f666beed2b61e40b16d74a661412a6269b5 Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Wed, 14 Oct 2020 18:03:03 +0800 Subject: [PATCH 06/27] =?UTF-8?q?=E5=BA=97=E9=93=BA=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Service/v3/Implementations/StoreService.php | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/app/Service/v3/Implementations/StoreService.php b/app/Service/v3/Implementations/StoreService.php index ed131dd..3df9d05 100644 --- a/app/Service/v3/Implementations/StoreService.php +++ b/app/Service/v3/Implementations/StoreService.php @@ -84,18 +84,7 @@ class StoreService implements StoreServiceInterface ->whereRaw(''.$goodsTable.'.deleted_at IS NULL') ->where([''.$storeTable.'.market_id' => $marketId, ''.$storeTable.'.is_rest' => StoreConstants::IS_REST_NO]); - if (isset($params['order_by']) && $params['order_by']) { - $sort = $params['sort'] ?? 'desc'; - switch ($params['order_by']) { - case 'sales': - $builder->orderBySales($sort); - break; - default: - $builder->orderByDefault($sort); - break; - } - } - $paginate = $builder->groupBy(''.$storeTable.'.id')->paginate($params['pagesize']); + $paginate = $builder->groupBy(''.$storeTable.'.id')->paginate($pagesize); $stores = $paginate->map(function ($item, $key) { $item->goods; return $item; From d400f971994b5571a5a8b4508f0b36409403ea34 Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Mon, 19 Oct 2020 09:34:45 +0800 Subject: [PATCH 07/27] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Constants/v3/ErrorCode.php | 6 + app/Controller/v3/CouponController.php | 31 ++++ app/Request/v3/CommunityBindRequest.php | 2 +- app/Request/v3/CouponReceiveRequest.php | 36 ++++ .../v3/Implementations/CouponRecService.php | 171 ++++++++++++++++++ .../Interfaces/CouponRecServiceInterface.php | 2 + config/routes.php | 2 + 7 files changed, 249 insertions(+), 1 deletion(-) create mode 100644 app/Request/v3/CouponReceiveRequest.php diff --git a/app/Constants/v3/ErrorCode.php b/app/Constants/v3/ErrorCode.php index 716e2cc..97f6337 100644 --- a/app/Constants/v3/ErrorCode.php +++ b/app/Constants/v3/ErrorCode.php @@ -324,6 +324,12 @@ class ErrorCode extends AbstractConstants */ const COUPON_USE_FAILURE = 1202; + /** + * 不是新用户无法领券 + * @Message("不是新用户无法领券") + */ + const COUPON_IS_NOT_NEW_USER = 1203; + /************************************/ /* 提现相关 1251-1300 */ /************************************/ diff --git a/app/Controller/v3/CouponController.php b/app/Controller/v3/CouponController.php index 2048fbe..ab98ed8 100644 --- a/app/Controller/v3/CouponController.php +++ b/app/Controller/v3/CouponController.php @@ -12,10 +12,15 @@ declare(strict_types=1); namespace App\Controller\v3; +use App\Constants\v3\ErrorCode; +use App\Exception\ErrorCodeException; +use App\Constants\v3\OrderState; +use App\Model\v3\OrderMain; use App\Request\v3\UserRequest; use Hyperf\Di\Annotation\Inject; use App\Controller\BaseController; use App\Service\v3\Interfaces\CouponRecServiceInterface; +use App\Request\v3\CouponReceiveRequest; class CouponController extends BaseController { @@ -75,4 +80,30 @@ class CouponController extends BaseController return $this->success($res); } + public function getAvailableListByNewUser() + { + $userId = $this->request->input("user_id", 0); + $receiveType = $this->request->input("receive_type", 0); + $newUserCheck = OrderMain::query() + ->where('user_id',$userId) + ->whereIn('state',OrderState::CAN_DEL) + ->whereIn('state',OrderState::REFUND) + ->exists(); + if($newUserCheck){ + throw new ErrorCodeException(ErrorCode::COUPON_IS_NOT_NEW_USER,'',$userId); + } + $res = $this->couponRecService->getAvailableList($userId,$receiveType); + return $this->success($res); + } + + /** + * 用户领取优惠卷 + */ + public function Receive(CouponReceiveRequest $request) + { + $userId = $this->request->input("user_id", 0); + $receiveType = $this->request->input("receive_type", 0); + $ids = $this->request->input("ids", ''); + $res['statistics'] = $this->couponRecService->receive($userId,$receiveType,$ids); + } } diff --git a/app/Request/v3/CommunityBindRequest.php b/app/Request/v3/CommunityBindRequest.php index 3f10776..101ab65 100644 --- a/app/Request/v3/CommunityBindRequest.php +++ b/app/Request/v3/CommunityBindRequest.php @@ -23,7 +23,7 @@ class CommunityBindRequest extends BaseFormRequest { return [ 'source_id' => 'required|nonempty', - 'user_id' => 'required|nonempty|exists_enable:ims_cjdc_user,id', + 'user_id' => 'required|nonempty|exists_enable:lanzu_user,id', 'json_data' => 'json', ]; } diff --git a/app/Request/v3/CouponReceiveRequest.php b/app/Request/v3/CouponReceiveRequest.php new file mode 100644 index 0000000..853601a --- /dev/null +++ b/app/Request/v3/CouponReceiveRequest.php @@ -0,0 +1,36 @@ + 'required|nonempty|integer', + 'receive_type' => 'required|nonempty|integer', + 'ids' => 'required', + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + '*.*' => ':attribute无效', + ]; + } + + public function attributes(): array + { + return parent::attributes(); + } +} \ No newline at end of file diff --git a/app/Service/v3/Implementations/CouponRecService.php b/app/Service/v3/Implementations/CouponRecService.php index 9919078..3ea449f 100644 --- a/app/Service/v3/Implementations/CouponRecService.php +++ b/app/Service/v3/Implementations/CouponRecService.php @@ -4,7 +4,9 @@ namespace App\Service\v3\Implementations; use App\Model\v3\Coupon; use App\Model\v3\CouponRec; +use App\Model\v3\CouponRecType; use App\Model\v3\GoodsActivity; +use App\Service\CommonService; use App\Service\v3\Interfaces\CouponRecServiceInterface; use App\Service\v3\Interfaces\CouponServiceInterface; use App\Service\v3\Interfaces\ShopCartServiceInterface; @@ -12,6 +14,8 @@ use Hyperf\DbConnection\Db; use Hyperf\Redis\Redis; use Hyperf\Utils\ApplicationContext; use Hyperf\Di\Annotation\Inject; +use App\Constants\v3\SsdbKeys; +use App\TaskWorker\SSDBTask; class CouponRecService implements CouponRecServiceInterface { @@ -28,6 +32,12 @@ class CouponRecService implements CouponRecServiceInterface */ protected $couponService; + /** + * @Inject + * @var HelperService + */ + protected $helperService; + public function do() { // TODO: Implement do() method. @@ -290,4 +300,165 @@ class CouponRecService implements CouponRecServiceInterface } return $res; } + + public function getAvailableList($userId,$receiveType) + { + /* 优惠券活动标志 2 */ + $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class); + $couponActivity = $ssdb->exec('hgetall', SsdbKeys::COUPON_REBATE_ACTIVITY); + $activityType = $couponActivity === false ? 0 : $couponActivity['activity']; + + $result = [ + 'active_type' => 1, + 'not_receive' => [], + 'jump_data' => [ + 'src' => "/zh_cjdianc/pages/couponrebate/index?activity_type=".$activityType, + 'src2' => "/zh_cjdianc/pages/couponrebate/index?activity_type=".$activityType, + 'share_bg' => env('OSS_IMG_HOST').'/static/img/coupon_share.png', + 'receive_bg' => env('OSS_IMG_HOST').'/static/img/coupon_bg.png', + 'coupons' => [] + ] + ]; + $nowTime = time(); + $c_ids = []; + // 渠道开启,查询该渠道可以领取的优惠券ID + // 渠道未开启,查询所有优惠券 + if (env('SUB_CHANNEL') == 1) { + $c_ids = CouponRecType::join('lanzu_coupon','lanzu_coupon.id','lanzu_coupon_receive_type.coupon_id') + ->where([ + ['lanzu_coupon_receive_type.receive_type','=',$receiveType], + ['lanzu_coupon.end_time','>',$nowTime], + ['lanzu_coupon.start_time','<=',$nowTime], + ['lanzu_coupon.status','=',1] + ]) + ->pluck('lanzu_coupon.id'); + } else { + $c_ids = Coupon::where([ + ['end_time','>',$nowTime], + ['start_time','<=',$nowTime], + ['status','=',1] + ])->pluck('id'); + } + + $couponReceive = CouponRec::where('user_id',$userId); + + // 渠道开启,查询该用户在此渠道领过的优惠券ID + if (env('SUB_CHANNEL') == 1) { + $couponReceive->where('receive_type', $receiveType); + } + $cr_ids = $couponReceive->pluck('coupon_id'); + + // 可领取的券ID + $c_ids = $c_ids->toArray(); + // 已经领取的券ID + $cr_ids = $cr_ids->toArray(); + + // 当前用户可领的优惠券ID + $couponIds = array_diff($c_ids, $cr_ids); + + // 转发型优惠券 + $couponReceiveIds = ($couponActivity === false || $this->helperService->nonempty($couponActivity['forward']) )? [] : explode(',',$couponActivity['forward']); + // 所有优惠券 + $couponIds = array_merge($couponIds,$couponReceiveIds); + + $whereC = [ + ['lanzu_coupon.end_time','>',$nowTime], + ['lanzu_coupon.start_time','<=',$nowTime], + ['lanzu_coupon.status','=',1] + ]; + // 查询领取型1 和 转发型2 + $whereActiveType = [1,2]; + + if (env('SUB_CHANNEL') == 1) { + array_push($whereC, ['type.receive_type','=', $receiveType]); + } + + $coupons = Coupon::join('lanzu_coupon_receive_type as type', 'lanzu_coupon.id', '=', 'type.coupon_id') + ->whereIn('lanzu_coupon.id', $couponIds) + ->whereIn('lanzu_coupon.active_type', $whereActiveType) + ->where($whereC) + ->whereRaw('lanzu_coupon.inventory_use < lanzu_coupon.inventory and lanzu_coupon.inventory-lanzu_coupon.inventory_use >= type.one_receive_number') + ->select('lanzu_coupon.*','type.one_receive_number') + ->orderBy('lanzu_coupon.weigh','desc') + ->get(); + + foreach ($coupons as $k => &$v){ + + if($v->active_type == 1 && count($result['not_receive']) < 4){ + $result['not_receive'][] = $v; + }else if($v->active_type == 2 && in_array($v->id,$couponReceiveIds)){ + $result['jump_data']['coupons'][] = $v->id; + } + + if($v->discount_type == 2){ + $v->discounts = floatval($v->discounts); + } + } + + $result['active_type'] = count($result['jump_data']['coupons']) > 0 ? 2 : $result['active_type'] ; + + return $result; + } + + /** + * @param $userId + * @param $receiveType + * @param $ids + */ + public function receive($userId, $receiveType, $ids) + { + $ids = explode(',', $ids); + $now = time(); + + $success = []; + $fail = []; + + // if ($this->empty($userId) || $this->empty($receiveType) || $this->empty($ids)) { + // return [ + // 'success' => $success, + // 'fail' => $fail, + // ]; + // } + + Db::transaction(function () use ($ids,$receiveType,$userId,&$success,&$fail,$now) { + //读写锁,完全控制,性能底 + $cps = Coupon::whereIn('id', $ids)->lockForUpdate()->get(); + //写锁,可能在高并发下,读取到脏数据,写入可能有超发情况 + //$cps = Coupon::whereIn('id', $ids)->sharedLock()->get(); + + foreach ($cps as $key => $cp) { + + $where = [ + 'coupon_id' => $cp->id, + ]; + + if (env('SUB_CHANNEL') == 1) { + $where['receive_type'] = $receiveType; + } + + $oneReceiveNumber = CouponRecType::where($where)->value('one_receive_number'); + + $cr = new CouponRec; + $cr->user_id = $userId; + $cr->coupon_id = $cp->id; + $cr->order_main_id = 0; + $cr->receive_time = $now; + $cr->number = $oneReceiveNumber; + $cr->number_remain = $oneReceiveNumber; + $cr->status = 0; + $cr->receive_type = $receiveType; + //如果优惠卷库存小于等于已领取的数量, 则返回领取失败的优惠券 + if ($cp->inventory<=$cp->inventory_use||$cp->inventory<($cp->inventory_use+$cr->number)){ + $fail[] = $cp; + }else{ + $cp->inventory_use += $cr->number;//记录已领取的数量 + if ($cr->save()&&$cp->save()) { + $success[] = $cp; + } else { + $fail[] = $cp; + } + } + } + }); + } } \ No newline at end of file diff --git a/app/Service/v3/Interfaces/CouponRecServiceInterface.php b/app/Service/v3/Interfaces/CouponRecServiceInterface.php index 83c5131..aacfc1a 100644 --- a/app/Service/v3/Interfaces/CouponRecServiceInterface.php +++ b/app/Service/v3/Interfaces/CouponRecServiceInterface.php @@ -16,4 +16,6 @@ interface CouponRecServiceInterface * @return mixed */ public function statistics($userId); + public function getAvailableList($userId,$receiveType); + public function receive($userId,$receiveType,$ids); } \ No newline at end of file diff --git a/config/routes.php b/config/routes.php index 53455dc..3a80997 100644 --- a/config/routes.php +++ b/config/routes.php @@ -165,6 +165,8 @@ Router::addGroup('/v3/', function () { Router::post('goods/create', 'App\Controller\v3\GoodsController@create'); Router::post('goods/updateOnSale', 'App\Controller\v3\GoodsController@updateOnSale'); Router::post('store/updateIsRest', 'App\Controller\v3\StoreController@updateIsRest'); + Router::post('coupon/getAvailableListByNewUser', 'App\Controller\v3\CouponController@getAvailableListByNewUser'); + Router::post('coupon/receive', 'App\Controller\v3\CouponController@receive'); },['middleware' => [\App\Middleware\Auth\ApiMiddleware::class, \App\Middleware\Auth\UserMiddleware::class]]); // 微信支付回调 From d32c3b7f865bdf208fe75348c1e68567aba4af9c Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Mon, 19 Oct 2020 09:49:32 +0800 Subject: [PATCH 08/27] =?UTF-8?q?=E9=A2=86=E5=88=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/v3/CouponController.php | 3 ++- app/Service/v3/Implementations/CouponRecService.php | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/Controller/v3/CouponController.php b/app/Controller/v3/CouponController.php index ab98ed8..a17b7ba 100644 --- a/app/Controller/v3/CouponController.php +++ b/app/Controller/v3/CouponController.php @@ -104,6 +104,7 @@ class CouponController extends BaseController $userId = $this->request->input("user_id", 0); $receiveType = $this->request->input("receive_type", 0); $ids = $this->request->input("ids", ''); - $res['statistics'] = $this->couponRecService->receive($userId,$receiveType,$ids); + $res = $this->couponRecService->receive($userId,$receiveType,$ids); + return $this->success($res); } } diff --git a/app/Service/v3/Implementations/CouponRecService.php b/app/Service/v3/Implementations/CouponRecService.php index 3ea449f..b4a1baf 100644 --- a/app/Service/v3/Implementations/CouponRecService.php +++ b/app/Service/v3/Implementations/CouponRecService.php @@ -460,5 +460,9 @@ class CouponRecService implements CouponRecServiceInterface } } }); + return [ + 'success' => $success, + 'fail' => $fail, + ]; } } \ No newline at end of file From aa18b67918a001ceb959dcac1a154223d783fbb5 Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Mon, 19 Oct 2020 11:06:02 +0800 Subject: [PATCH 09/27] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E6=8B=BC=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/v3/Coupon.php | 8 +++++++- app/Service/v3/Implementations/CouponRecService.php | 3 ++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/Model/v3/Coupon.php b/app/Model/v3/Coupon.php index 2af1594..206c889 100644 --- a/app/Model/v3/Coupon.php +++ b/app/Model/v3/Coupon.php @@ -14,7 +14,8 @@ class Coupon extends Model protected $appends = [ 'full_amount_text', 'discounts_text', - 'time_text' + 'time_text', + 'effective_time_text' ]; protected $casts = [ @@ -41,4 +42,9 @@ class Coupon extends Model return date("Y-m-d H:i:s",$this->attributes['usable_start_time']). ' - ' .date("Y-m-d H:i:s",$this->attributes['usable_end_time']); } + public function getEffectiveTimeTextAttribute() + { + return '有效期:'.date("Y-m-d",$this->attributes['usable_start_time']). ' - ' .date("Y-m-d",$this->attributes['usable_end_time']); + } + } diff --git a/app/Service/v3/Implementations/CouponRecService.php b/app/Service/v3/Implementations/CouponRecService.php index b4a1baf..b6cb27a 100644 --- a/app/Service/v3/Implementations/CouponRecService.php +++ b/app/Service/v3/Implementations/CouponRecService.php @@ -440,12 +440,13 @@ class CouponRecService implements CouponRecServiceInterface $cr = new CouponRec; $cr->user_id = $userId; - $cr->coupon_id = $cp->id; + $cr->coupon_id = $cp->id; $cr->order_main_id = 0; $cr->receive_time = $now; $cr->number = $oneReceiveNumber; $cr->number_remain = $oneReceiveNumber; $cr->status = 0; + $cr->update_time = $now; $cr->receive_type = $receiveType; //如果优惠卷库存小于等于已领取的数量, 则返回领取失败的优惠券 if ($cp->inventory<=$cp->inventory_use||$cp->inventory<($cp->inventory_use+$cr->number)){ From d79bc9d106dd074f0e9e5a8df43a5e3efda72d2b Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Mon, 19 Oct 2020 14:04:07 +0800 Subject: [PATCH 10/27] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E9=9D=9E?= =?UTF-8?q?=E6=96=B0=E7=94=A8=E6=88=B7=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/v3/CouponController.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/Controller/v3/CouponController.php b/app/Controller/v3/CouponController.php index a17b7ba..d82268a 100644 --- a/app/Controller/v3/CouponController.php +++ b/app/Controller/v3/CouponController.php @@ -90,7 +90,13 @@ class CouponController extends BaseController ->whereIn('state',OrderState::REFUND) ->exists(); if($newUserCheck){ - throw new ErrorCodeException(ErrorCode::COUPON_IS_NOT_NEW_USER,'',$userId); + return $this->result( + ErrorCode::COUPON_IS_NOT_NEW_USER, + [ + 'text'=>'关注懒族菜市微信公众号,更多精彩活动一手掌握!' + ], + '不是新用户无法领券' + ); } $res = $this->couponRecService->getAvailableList($userId,$receiveType); return $this->success($res); From 9f6e84de962be66e1e42103447a577b7092e77a2 Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Mon, 19 Oct 2020 14:10:30 +0800 Subject: [PATCH 11/27] =?UTF-8?q?=E9=9D=9E=E6=96=B0=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/v3/CouponController.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Controller/v3/CouponController.php b/app/Controller/v3/CouponController.php index d82268a..b0c1ef5 100644 --- a/app/Controller/v3/CouponController.php +++ b/app/Controller/v3/CouponController.php @@ -90,12 +90,12 @@ class CouponController extends BaseController ->whereIn('state',OrderState::REFUND) ->exists(); if($newUserCheck){ - return $this->result( - ErrorCode::COUPON_IS_NOT_NEW_USER, + return $this->success( [ + 'error' => true, + 'error_text' => '不是新用户无法领券', 'text'=>'关注懒族菜市微信公众号,更多精彩活动一手掌握!' - ], - '不是新用户无法领券' + ] ); } $res = $this->couponRecService->getAvailableList($userId,$receiveType); From 6aa9167b4dfdfe57601028adb7a8e5f6640d5854 Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Mon, 19 Oct 2020 17:14:05 +0800 Subject: [PATCH 12/27] =?UTF-8?q?=E9=A2=86=E5=88=B8=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Constants/v3/ErrorCode.php | 6 ++++++ app/Controller/v3/CouponController.php | 10 +++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/Constants/v3/ErrorCode.php b/app/Constants/v3/ErrorCode.php index 97f6337..2d852f1 100644 --- a/app/Constants/v3/ErrorCode.php +++ b/app/Constants/v3/ErrorCode.php @@ -330,6 +330,12 @@ class ErrorCode extends AbstractConstants */ const COUPON_IS_NOT_NEW_USER = 1203; + /** + * 优惠券领取失败 + * @Message("优惠券领取失败") + */ + const COUPON_RECEIVE_FAILURE = 1204; + /************************************/ /* 提现相关 1251-1300 */ /************************************/ diff --git a/app/Controller/v3/CouponController.php b/app/Controller/v3/CouponController.php index b0c1ef5..23bddde 100644 --- a/app/Controller/v3/CouponController.php +++ b/app/Controller/v3/CouponController.php @@ -92,8 +92,8 @@ class CouponController extends BaseController if($newUserCheck){ return $this->success( [ - 'error' => true, - 'error_text' => '不是新用户无法领券', + 'status' => 'error', + 'message' => '不是新用户无法领券', 'text'=>'关注懒族菜市微信公众号,更多精彩活动一手掌握!' ] ); @@ -111,6 +111,10 @@ class CouponController extends BaseController $receiveType = $this->request->input("receive_type", 0); $ids = $this->request->input("ids", ''); $res = $this->couponRecService->receive($userId,$receiveType,$ids); - return $this->success($res); + if(!empty($res['success'])){ + return $this->success(['text' => '红包领取成功,请到“我的-红包”中查看']); + }else{ + throw new ErrorCodeException(ErrorCode::COUPON_RECEIVE_FAILURE); + } } } From b5446fdde9a774960c4b12594db0d098b7b763f6 Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Mon, 19 Oct 2020 17:20:48 +0800 Subject: [PATCH 13/27] =?UTF-8?q?=E9=A2=86=E5=88=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/v3/CouponController.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/Controller/v3/CouponController.php b/app/Controller/v3/CouponController.php index 23bddde..51aa1aa 100644 --- a/app/Controller/v3/CouponController.php +++ b/app/Controller/v3/CouponController.php @@ -112,7 +112,10 @@ class CouponController extends BaseController $ids = $this->request->input("ids", ''); $res = $this->couponRecService->receive($userId,$receiveType,$ids); if(!empty($res['success'])){ - return $this->success(['text' => '红包领取成功,请到“我的-红包”中查看']); + return $this->success([ + 'status' => 'ok', + 'message' => '红包领取成功,请到“我的-红包”中查看'] + ); }else{ throw new ErrorCodeException(ErrorCode::COUPON_RECEIVE_FAILURE); } From 4f700689e515fc1ec667cdb4397ec9f08571b54c Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Mon, 19 Oct 2020 17:47:16 +0800 Subject: [PATCH 14/27] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v3/Implementations/CouponRecService.php | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/app/Service/v3/Implementations/CouponRecService.php b/app/Service/v3/Implementations/CouponRecService.php index b6cb27a..692bc52 100644 --- a/app/Service/v3/Implementations/CouponRecService.php +++ b/app/Service/v3/Implementations/CouponRecService.php @@ -422,7 +422,12 @@ class CouponRecService implements CouponRecServiceInterface Db::transaction(function () use ($ids,$receiveType,$userId,&$success,&$fail,$now) { //读写锁,完全控制,性能底 - $cps = Coupon::whereIn('id', $ids)->lockForUpdate()->get(); + + $builder = Coupon::whereIn('id', $ids); + if (env('SUB_CHANNEL') == 1) { + $builder->where('receive_type',$receiveType); + } + $cps = $builder->lockForUpdate()->get(); //写锁,可能在高并发下,读取到脏数据,写入可能有超发情况 //$cps = Coupon::whereIn('id', $ids)->sharedLock()->get(); @@ -432,12 +437,12 @@ class CouponRecService implements CouponRecServiceInterface 'coupon_id' => $cp->id, ]; - if (env('SUB_CHANNEL') == 1) { - $where['receive_type'] = $receiveType; - } - $oneReceiveNumber = CouponRecType::where($where)->value('one_receive_number'); - + $couponInventory = $cp->inventory - $cp->inventory_use; + + if($couponInventory < $oneReceiveNumber){ + continue; + } $cr = new CouponRec; $cr->user_id = $userId; $cr->coupon_id = $cp->id; From d90f7e4a3035d5ed72a67fef8ba9db747ac9cb98 Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Mon, 19 Oct 2020 17:53:21 +0800 Subject: [PATCH 15/27] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E6=8A=A2?= =?UTF-8?q?=E5=85=89=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/v3/CouponController.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/Controller/v3/CouponController.php b/app/Controller/v3/CouponController.php index 51aa1aa..3a393fb 100644 --- a/app/Controller/v3/CouponController.php +++ b/app/Controller/v3/CouponController.php @@ -99,6 +99,15 @@ class CouponController extends BaseController ); } $res = $this->couponRecService->getAvailableList($userId,$receiveType); + if(empty($res->not_receive)){ + return $this->success( + [ + 'status' => 'error', + 'message' => '优惠券已经被抢光了', + 'text'=>'关注懒族菜市微信公众号,更多精彩活动一手掌握!' + ] + ); + } return $this->success($res); } From 899cceb1d5e1f35b712e88bd8acb6957e3f12953 Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Mon, 19 Oct 2020 17:57:54 +0800 Subject: [PATCH 16/27] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E8=A2=AB?= =?UTF-8?q?=E6=8A=A2=E5=85=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/v3/CouponController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Controller/v3/CouponController.php b/app/Controller/v3/CouponController.php index 3a393fb..dd2f4ba 100644 --- a/app/Controller/v3/CouponController.php +++ b/app/Controller/v3/CouponController.php @@ -99,7 +99,7 @@ class CouponController extends BaseController ); } $res = $this->couponRecService->getAvailableList($userId,$receiveType); - if(empty($res->not_receive)){ + if(empty($res['not_receive'])){ return $this->success( [ 'status' => 'error', From f7c8dc2b4ec70f295ff8da4018b760f9abaf95d6 Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Mon, 19 Oct 2020 19:11:44 +0800 Subject: [PATCH 17/27] =?UTF-8?q?=E9=A2=86=E5=88=B8=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/v3/CouponController.php | 2 +- app/Service/v3/Implementations/CouponRecService.php | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/Controller/v3/CouponController.php b/app/Controller/v3/CouponController.php index dd2f4ba..3cc0722 100644 --- a/app/Controller/v3/CouponController.php +++ b/app/Controller/v3/CouponController.php @@ -103,7 +103,7 @@ class CouponController extends BaseController return $this->success( [ 'status' => 'error', - 'message' => '优惠券已经被抢光了', + 'message' => '未满足领取条件', 'text'=>'关注懒族菜市微信公众号,更多精彩活动一手掌握!' ] ); diff --git a/app/Service/v3/Implementations/CouponRecService.php b/app/Service/v3/Implementations/CouponRecService.php index 692bc52..d1aaf9c 100644 --- a/app/Service/v3/Implementations/CouponRecService.php +++ b/app/Service/v3/Implementations/CouponRecService.php @@ -439,10 +439,16 @@ class CouponRecService implements CouponRecServiceInterface $oneReceiveNumber = CouponRecType::where($where)->value('one_receive_number'); $couponInventory = $cp->inventory - $cp->inventory_use; - + if($couponInventory < $oneReceiveNumber){ continue; } + + $couponReceiveExists = CouponRec::query()->where(['id'=>$cp->id,'user_id'=>$userId])->exists(); + + if($couponReceiveExists){ + continue; + } $cr = new CouponRec; $cr->user_id = $userId; $cr->coupon_id = $cp->id; From 90c716178e108b84d0a7d67e0e53d04c061d40ef Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Mon, 19 Oct 2020 19:15:47 +0800 Subject: [PATCH 18/27] =?UTF-8?q?=E9=A2=86=E5=88=B8=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Service/v3/Implementations/CouponRecService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Service/v3/Implementations/CouponRecService.php b/app/Service/v3/Implementations/CouponRecService.php index d1aaf9c..49fcdf3 100644 --- a/app/Service/v3/Implementations/CouponRecService.php +++ b/app/Service/v3/Implementations/CouponRecService.php @@ -444,7 +444,7 @@ class CouponRecService implements CouponRecServiceInterface continue; } - $couponReceiveExists = CouponRec::query()->where(['id'=>$cp->id,'user_id'=>$userId])->exists(); + $couponReceiveExists = CouponRec::query()->where(['coupon_id'=>$cp->id,'user_id'=>$userId])->exists(); if($couponReceiveExists){ continue; From b90f48e145a52ced24beb3c095e51c0f892f6d9c Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Tue, 20 Oct 2020 10:12:29 +0800 Subject: [PATCH 19/27] =?UTF-8?q?=E4=B8=8B=E5=8D=95=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E5=88=B8=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v3/Implementations/OrderOnlineService.php | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/app/Service/v3/Implementations/OrderOnlineService.php b/app/Service/v3/Implementations/OrderOnlineService.php index 1e8706c..1542b95 100644 --- a/app/Service/v3/Implementations/OrderOnlineService.php +++ b/app/Service/v3/Implementations/OrderOnlineService.php @@ -176,19 +176,6 @@ class OrderOnlineService implements OrderOnlineServiceInterface // $userAddr->lng = $market->lng; } - // 优惠券数据,当前订单可用个优惠券 - $couponRecs = $this->couponRecService->allForOnlineOrderAvailable($userId, $marketId); - $canRealUseCoupons = $couponRecs['available']; - $canRealUseCouponRecIds = array_values(array_column($canRealUseCoupons, 'id')); - if (!empty(array_diff($receiveCouponIds, $canRealUseCouponRecIds))) { - $this->log->event(LogLabel::ORDER_ONLINE_LOG, ['msg' => '订单中有不能使用优惠券的商品', 'data' => json_encode([ - 'all_user_coupons_rec' => json_encode($couponRecs), - 'can_real_user_coupons' => json_encode($canRealUseCoupons), - 'receive_coupon_ids' => json_encode($canRealUseCouponRecIds), - ])]); - throw new ErrorCodeException(ErrorCode::GOODS_ACTIVITY_CANNOT_USE_COUPON); - } - // 处理购物车数据,计算订单金额、子订单数据处理等 $totalAmount = 0; # 实付金额 $orderAmount = 0; # 订单金额 @@ -294,6 +281,19 @@ class OrderOnlineService implements OrderOnlineServiceInterface $orderAmount = bcadd((string)$orderAmount, (string)$subAmount); } + // 优惠券数据,当前订单可用个优惠券 + $couponRecs = $this->couponRecService->allForOnlineOrderAvailable($userId, $marketId ,$shopcartIds); + $canRealUseCoupons = $couponRecs['available']; + $canRealUseCouponRecIds = array_values(array_column($canRealUseCoupons, 'id')); + if (!empty(array_diff($receiveCouponIds, $canRealUseCouponRecIds))) { + $this->log->event(LogLabel::ORDER_ONLINE_LOG, ['msg' => '订单中有不能使用优惠券的商品', 'data' => json_encode([ + 'all_user_coupons_rec' => json_encode($couponRecs), + 'can_real_user_coupons' => json_encode($canRealUseCoupons), + 'receive_coupon_ids' => json_encode($canRealUseCouponRecIds), + ])]); + throw new ErrorCodeException(ErrorCode::GOODS_ACTIVITY_CANNOT_USE_COUPON); + } + // 优惠券的使用 $couponMoney = 0; if (!empty($receiveCouponIds)) { From 30b5f55daab45972c52758ef07aed1f28e099377 Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Tue, 20 Oct 2020 11:59:01 +0800 Subject: [PATCH 20/27] =?UTF-8?q?=E5=8F=96=E6=B6=88=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E5=88=B8=E8=BF=94=E5=9B=9E=E4=B8=8A=E9=99=904=E4=B8=AA?= =?UTF-8?q?=E7=9A=84=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Service/v3/Implementations/CouponRecService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Service/v3/Implementations/CouponRecService.php b/app/Service/v3/Implementations/CouponRecService.php index 49fcdf3..a851f5a 100644 --- a/app/Service/v3/Implementations/CouponRecService.php +++ b/app/Service/v3/Implementations/CouponRecService.php @@ -384,7 +384,7 @@ class CouponRecService implements CouponRecServiceInterface foreach ($coupons as $k => &$v){ - if($v->active_type == 1 && count($result['not_receive']) < 4){ + if($v->active_type == 1){ $result['not_receive'][] = $v; }else if($v->active_type == 2 && in_array($v->id,$couponReceiveIds)){ $result['jump_data']['coupons'][] = $v->id; From f1aaa56a656c8b46a4f04db4706f62d704b9bcd1 Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Tue, 20 Oct 2020 14:45:12 +0800 Subject: [PATCH 21/27] =?UTF-8?q?=E6=8E=A8=E8=8D=90=E5=BA=97=E9=93=BA?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Service/v3/Implementations/StoreService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Service/v3/Implementations/StoreService.php b/app/Service/v3/Implementations/StoreService.php index 3df9d05..9a2628a 100644 --- a/app/Service/v3/Implementations/StoreService.php +++ b/app/Service/v3/Implementations/StoreService.php @@ -84,7 +84,7 @@ class StoreService implements StoreServiceInterface ->whereRaw(''.$goodsTable.'.deleted_at IS NULL') ->where([''.$storeTable.'.market_id' => $marketId, ''.$storeTable.'.is_rest' => StoreConstants::IS_REST_NO]); - $paginate = $builder->groupBy(''.$storeTable.'.id')->paginate($pagesize); + $paginate = $builder->groupBy(''.$storeTable.'.sales')->paginate($pagesize); $stores = $paginate->map(function ($item, $key) { $item->goods; return $item; From 8912600708cffba10408a780a5dee8ba47194fe7 Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Tue, 20 Oct 2020 15:01:55 +0800 Subject: [PATCH 22/27] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E5=BA=97=E9=93=BA?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Service/v3/Implementations/StoreService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Service/v3/Implementations/StoreService.php b/app/Service/v3/Implementations/StoreService.php index 9a2628a..1fd2316 100644 --- a/app/Service/v3/Implementations/StoreService.php +++ b/app/Service/v3/Implementations/StoreService.php @@ -84,7 +84,7 @@ class StoreService implements StoreServiceInterface ->whereRaw(''.$goodsTable.'.deleted_at IS NULL') ->where([''.$storeTable.'.market_id' => $marketId, ''.$storeTable.'.is_rest' => StoreConstants::IS_REST_NO]); - $paginate = $builder->groupBy(''.$storeTable.'.sales')->paginate($pagesize); + $paginate = $builder->groupBy(''.$storeTable.'.id')->orderByDesc('sales')->paginate($pagesize); $stores = $paginate->map(function ($item, $key) { $item->goods; return $item; From df00e6b62784a05b945e8644cd032efce7d1b24b Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Tue, 20 Oct 2020 15:04:56 +0800 Subject: [PATCH 23/27] =?UTF-8?q?=E5=BA=97=E9=93=BA=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Service/v3/Implementations/StoreService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Service/v3/Implementations/StoreService.php b/app/Service/v3/Implementations/StoreService.php index 1fd2316..bc94996 100644 --- a/app/Service/v3/Implementations/StoreService.php +++ b/app/Service/v3/Implementations/StoreService.php @@ -84,7 +84,7 @@ class StoreService implements StoreServiceInterface ->whereRaw(''.$goodsTable.'.deleted_at IS NULL') ->where([''.$storeTable.'.market_id' => $marketId, ''.$storeTable.'.is_rest' => StoreConstants::IS_REST_NO]); - $paginate = $builder->groupBy(''.$storeTable.'.id')->orderByDesc('sales')->paginate($pagesize); + $paginate = $builder->groupBy(''.$storeTable.'.id')->orderBy($storeTable.'is_rest','asc')->orderByDesc($storeTable.'sales')->paginate($pagesize); $stores = $paginate->map(function ($item, $key) { $item->goods; return $item; From bc60cd16c53451f732afdb6ce096a6d3eb368e32 Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Tue, 20 Oct 2020 15:09:56 +0800 Subject: [PATCH 24/27] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E5=BA=97=E9=93=BA?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Service/v3/Implementations/StoreService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Service/v3/Implementations/StoreService.php b/app/Service/v3/Implementations/StoreService.php index bc94996..dfef179 100644 --- a/app/Service/v3/Implementations/StoreService.php +++ b/app/Service/v3/Implementations/StoreService.php @@ -84,7 +84,7 @@ class StoreService implements StoreServiceInterface ->whereRaw(''.$goodsTable.'.deleted_at IS NULL') ->where([''.$storeTable.'.market_id' => $marketId, ''.$storeTable.'.is_rest' => StoreConstants::IS_REST_NO]); - $paginate = $builder->groupBy(''.$storeTable.'.id')->orderBy($storeTable.'is_rest','asc')->orderByDesc($storeTable.'sales')->paginate($pagesize); + $paginate = $builder->groupBy(''.$storeTable.'.id')->orderBy($storeTable.'.is_rest','asc')->orderByDesc($storeTable.'sales')->paginate($pagesize); $stores = $paginate->map(function ($item, $key) { $item->goods; return $item; From 85b08f4abed1b88913e01bcdf137f286ad63f44b Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Tue, 20 Oct 2020 15:12:11 +0800 Subject: [PATCH 25/27] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E5=BA=97=E9=93=BA?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Service/v3/Implementations/StoreService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Service/v3/Implementations/StoreService.php b/app/Service/v3/Implementations/StoreService.php index dfef179..ae9ac91 100644 --- a/app/Service/v3/Implementations/StoreService.php +++ b/app/Service/v3/Implementations/StoreService.php @@ -84,7 +84,7 @@ class StoreService implements StoreServiceInterface ->whereRaw(''.$goodsTable.'.deleted_at IS NULL') ->where([''.$storeTable.'.market_id' => $marketId, ''.$storeTable.'.is_rest' => StoreConstants::IS_REST_NO]); - $paginate = $builder->groupBy(''.$storeTable.'.id')->orderBy($storeTable.'.is_rest','asc')->orderByDesc($storeTable.'sales')->paginate($pagesize); + $paginate = $builder->groupBy(''.$storeTable.'.id')->orderBy($storeTable.'.is_rest','asc')->orderByDesc($storeTable.'.sales')->paginate($pagesize); $stores = $paginate->map(function ($item, $key) { $item->goods; return $item; From e7b758d08fe7bb91356b63f84a68203f9b80d30a Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Tue, 20 Oct 2020 15:16:16 +0800 Subject: [PATCH 26/27] =?UTF-8?q?=E5=BA=97=E9=93=BA=E6=8E=92=E5=BA=8F=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Service/v3/Implementations/StoreService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Service/v3/Implementations/StoreService.php b/app/Service/v3/Implementations/StoreService.php index ae9ac91..1935940 100644 --- a/app/Service/v3/Implementations/StoreService.php +++ b/app/Service/v3/Implementations/StoreService.php @@ -84,7 +84,7 @@ class StoreService implements StoreServiceInterface ->whereRaw(''.$goodsTable.'.deleted_at IS NULL') ->where([''.$storeTable.'.market_id' => $marketId, ''.$storeTable.'.is_rest' => StoreConstants::IS_REST_NO]); - $paginate = $builder->groupBy(''.$storeTable.'.id')->orderBy($storeTable.'.is_rest','asc')->orderByDesc($storeTable.'.sales')->paginate($pagesize); + $paginate = $builder->groupBy(''.$storeTable.'.id')->orderByDesc($storeTable.'.sales')->paginate($pagesize); $stores = $paginate->map(function ($item, $key) { $item->goods; return $item; From 36895e020af40979adbb1b6cb4b64b58bf7f5fe8 Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Tue, 20 Oct 2020 15:36:27 +0800 Subject: [PATCH 27/27] =?UTF-8?q?=E9=A6=96=E9=A1=B5=20=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E7=89=88=E6=9C=AC=E5=8F=B7=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/v3/HomeController.php | 3 ++- .../v3/Implementations/TabsService.php | 26 +++++++++++++------ .../v3/Interfaces/TabsServiceInterface.php | 2 +- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/app/Controller/v3/HomeController.php b/app/Controller/v3/HomeController.php index 35caaf4..0224d59 100644 --- a/app/Controller/v3/HomeController.php +++ b/app/Controller/v3/HomeController.php @@ -131,10 +131,11 @@ class HomeController extends BaseController public function appletIndex() { $marketId = $this->request->input('market_id', -1); + $version = $this->request->input('version', -1); $banners = $this->bannerService->all(Banner::TYPE_APPLET_INDEX, $marketId); $categories = $this->categoryService->allForAppletIndex(); $activity = $this->activityService->allForAppletIndex(env('APPLET_INDEX_ACTIVITY_TYPE'), $marketId); - $tabs = $this->tabsService->allForAppletIndex(); + $tabs = $this->tabsService->allForAppletIndex($version); return $this->success([ 'banners' => $banners, diff --git a/app/Service/v3/Implementations/TabsService.php b/app/Service/v3/Implementations/TabsService.php index 7733fa1..2438937 100644 --- a/app/Service/v3/Implementations/TabsService.php +++ b/app/Service/v3/Implementations/TabsService.php @@ -23,14 +23,24 @@ class TabsService implements TabsServiceInterface // TODO: Implement undo() method. } - public function allForAppletIndex() + public function allForAppletIndex($version) { - return [ - ['tab' => Tabs::APPLET_INDEX_STORE, 'title' => '推荐店铺', 'subtitle' => '物美价廉', 'badge' => '', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], - ['tab' => Tabs::APPLET_INDEX_RECOMMEND, 'title' => '猜你喜欢', 'subtitle' => '我是你的菜', 'badge' => '', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], - ['tab' => Tabs::APPLET_INDEX_NEW, 'title' => '每日上新', 'subtitle' => '新鲜当日达', 'badge' => '好新鲜', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], - ['tab' => Tabs::APPLET_INDEX_FRESH, 'title' => '懒族优选', 'subtitle' => '发现不一样', 'badge' => '', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], - //['tab' => Tabs::APPLET_INDEX_OFFICE, 'title' => '白领餐食', 'subtitle' => '轻奢快手菜', 'badge' => '手到食来', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], - ]; + if($version == '3.0.12'){ + return [ + ['tab' => Tabs::APPLET_INDEX_STORE, 'title' => '推荐店铺', 'subtitle' => '物美价廉', 'badge' => '', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], + ['tab' => Tabs::APPLET_INDEX_RECOMMEND, 'title' => '猜你喜欢', 'subtitle' => '我是你的菜', 'badge' => '', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], + ['tab' => Tabs::APPLET_INDEX_NEW, 'title' => '每日上新', 'subtitle' => '新鲜当日达', 'badge' => '好新鲜', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], + ['tab' => Tabs::APPLET_INDEX_FRESH, 'title' => '懒族优选', 'subtitle' => '发现不一样', 'badge' => '', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], + //['tab' => Tabs::APPLET_INDEX_OFFICE, 'title' => '白领餐食', 'subtitle' => '轻奢快手菜', 'badge' => '手到食来', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], + ]; + }else{ + return [ + //['tab' => Tabs::APPLET_INDEX_STORE, 'title' => '推荐店铺', 'subtitle' => '物美价廉', 'badge' => '', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], + ['tab' => Tabs::APPLET_INDEX_RECOMMEND, 'title' => '猜你喜欢', 'subtitle' => '我是你的菜', 'badge' => '', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], + ['tab' => Tabs::APPLET_INDEX_NEW, 'title' => '每日上新', 'subtitle' => '新鲜当日达', 'badge' => '好新鲜', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], + ['tab' => Tabs::APPLET_INDEX_FRESH, 'title' => '懒族优选', 'subtitle' => '发现不一样', 'badge' => '', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], + ['tab' => Tabs::APPLET_INDEX_OFFICE, 'title' => '白领餐食', 'subtitle' => '轻奢快手菜', 'badge' => '手到食来', 'bg_color' => '#FF0000', 'font_color' => '#FFFFFF'], + ]; + } } } \ No newline at end of file diff --git a/app/Service/v3/Interfaces/TabsServiceInterface.php b/app/Service/v3/Interfaces/TabsServiceInterface.php index 7693484..02c3229 100644 --- a/app/Service/v3/Interfaces/TabsServiceInterface.php +++ b/app/Service/v3/Interfaces/TabsServiceInterface.php @@ -7,5 +7,5 @@ interface TabsServiceInterface public function do(); public function check(); public function undo(); - public function allForAppletIndex(); + public function allForAppletIndex($version); } \ No newline at end of file