Browse Source

Merge branch 'feature/share_info_and_activity' into master

master
weigang 5 years ago
parent
commit
e48951bf98
  1. 51
      app/Controller/v3/HomeController.php
  2. 4
      app/Controller/v3/OrderListController.php
  3. 12
      app/Model/v3/ImsMcFansTag.php
  4. 1
      app/Request/v3/UserOrderListRequest.php
  5. 59
      app/Service/v3/Implementations/ActivityService.php
  6. 18
      app/Service/v3/Implementations/OrderListService.php
  7. 22
      app/Service/v3/Implementations/ShareInfoService.php
  8. 2
      app/Service/v3/Implementations/UserInfoService.php
  9. 1
      app/Service/v3/Interfaces/ActivityServiceInterface.php
  10. 4
      app/Service/v3/Interfaces/OrderListServiceInterface.php
  11. 8
      app/Service/v3/Interfaces/ShareInfoServiceInterface.php
  12. 1
      config/autoload/dependencies.php

51
app/Controller/v3/HomeController.php

@ -11,6 +11,7 @@ use App\Constants\v3\Tabs;
use App\Constants\v3\UserType;
use App\Controller\BaseController;
use App\Model\v3\FinancialRecord;
use App\Model\v3\ImsMcFansTag;
use App\Model\v3\Market;
use App\Model\v3\Store;
use App\Request\v3\StoreIndexRequest;
@ -25,12 +26,16 @@ use App\Service\v3\Interfaces\FinancialRecordServiceInterface;
use App\Service\v3\Interfaces\OrderOnlineServiceInterface;
use App\Service\v3\Interfaces\OrderStatisticsServiceInterface;
use App\Service\v3\Interfaces\RevenueListServiceInterface;
use App\Service\v3\Interfaces\ShareInfoServiceInterface;
use App\Service\v3\Interfaces\StoreServiceInterface;
use App\Service\v3\Interfaces\TabsServiceInterface;
use App\Service\v3\Interfaces\UserCenterBlockServiceInterface;
use App\Service\v3\Interfaces\UserInfoServiceInterface;
use App\TaskWorker\SSDBTask;
use EasyWeChat\Factory;
use EasyWeChat\Kernel\Exceptions\InvalidConfigException;
use Hyperf\Di\Annotation\Inject;
use Hyperf\Guzzle\CoroutineHandler;
use Hyperf\Redis\Redis;
use Hyperf\Utils\ApplicationContext;
use Psr\Http\Message\ResponseInterface;
@ -121,6 +126,12 @@ class HomeController extends BaseController
*/
protected $financialRecordService;
/**
* @Inject
* @var ShareInfoServiceInterface
*/
protected $shareInfoService;
/**
* 小程序首页,根据market_id
* 1.banner数据
@ -134,14 +145,18 @@ class HomeController extends BaseController
$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);
// $activity = $this->activityService->allForAppletIndex(env('APPLET_INDEX_ACTIVITY_TYPE'), $marketId);
$activity = $this->activityService->allSpecialForAppletIndex($marketId);
$tabs = $this->tabsService->allForAppletIndex($version);
$shareInfo = $this->shareInfoService->getForApplet();
return $this->success([
'banners' => $banners,
'categories' => $categories,
'activity' => ['type' => ActivityType::FLASH_SALE, 'goods' => $activity],
// 'activity' => ['type' => ActivityType::FLASH_SALE, 'goods' => $activity],
'activity' => $activity,
'tabs' => $tabs,
'share_info' => $shareInfo,
]);
}
@ -154,6 +169,7 @@ class HomeController extends BaseController
* 4、为你推荐的商品列表
* @param UserIndexRequest $request
* @return ResponseInterface
* @throws InvalidConfigException
*/
public function userIndex(UserIndexRequest $request)
{
@ -195,6 +211,37 @@ class HomeController extends BaseController
$data['block'] = $this->userCenterBlockService->all($roles);
// 返回用户是否已经关注公众号和查看时候跳转的文章地址
try {
$config = config('wechat.official');
$app = Factory::officialAccount(['app_id' => $config['app_id'], 'secret' => $config['app_secret']]);
$app['guzzle_handler'] = CoroutineHandler::class;
$redis = ApplicationContext::getContainer()->get(Redis::class);
$fansInfo = ['subscribe' => 0];
$fansTag = ImsMcFansTag::query()->where(['unionid' => $data['user']['unionid']])->first();
if (empty($fansTag)) { // 无绑定时无关注,单需要处理老we7那边更新unionid的事宜
$subscribeInfo = $redis->hGet('official:subscribe_info', 'not_subscribed');
} else { // 有记录时去微信看有没有关注
$userOfficialOpenid = $fansTag->openid ?? '';
$fansInfo = $app->user->get($userOfficialOpenid);
if (isset($fansInfo['subscribe']) && $fansInfo['subscribe'] == 1) {
$subscribeInfo = $redis->hGet('official:subscribe_info', 'subscribed');
} else {
$subscribeInfo = $redis->hGet('official:subscribe_info', 'not_subscribed');
}
}
$subscribeInfo = !empty($subscribeInfo) ? json_decode($subscribeInfo, true) : [];
$data['subscribe_info'] = array_merge($fansInfo, $subscribeInfo);
} catch (\Exception $e) {
$data['subscribe_info'] = (object)[];
}
return $this->success($data);
}

4
app/Controller/v3/OrderListController.php

@ -34,14 +34,14 @@ class OrderListController extends BaseController
public function onlineForUser(UserOrderListRequest $request)
{
$params = $request->validated();
$list = $this->orderListService->onlineByUser($params['user_id'], $params['tab'], $params['page'], $params['pagesize']);
$list = $this->orderListService->onlineByUser($params['user_id'], $params['tab'], $params['page'], $params['pagesize'], $params['last_id']);
return $this->success($list);
}
public function onlineForStore()
{
$params = $this->request->all();
$list = $this->orderListService->onlineByStore($params['store_id'], $params['tab'], $params['page'], $params['pagesize']);
$list = $this->orderListService->onlineByStore($params['store_id'], $params['tab'], $params['page'], $params['pagesize'], $params['last_id']);
return $this->success($list);
}

12
app/Model/v3/ImsMcFansTag.php

@ -0,0 +1,12 @@
<?php
namespace App\Model\v3;
use App\Model\Model;
class ImsMcFansTag extends Model
{
protected $table = 'ims_mc_fans_tag';
}

1
app/Request/v3/UserOrderListRequest.php

@ -19,6 +19,7 @@ class UserOrderListRequest extends BaseFormRequest
'tab' => '',
'page' => 'required|nonempty',
'pagesize' => 'required|nonempty',
'last_id' => ''
];
}

59
app/Service/v3/Implementations/ActivityService.php

@ -6,6 +6,7 @@ use App\Constants\v3\Goods as GoodsConstants;
use App\Model\v3\GoodsActivity;
use App\Model\v3\Store;
use App\Service\v3\Interfaces\ActivityServiceInterface;
use Hyperf\Redis\Redis;
use Hyperf\Utils\ApplicationContext;
class ActivityService implements ActivityServiceInterface
@ -61,4 +62,62 @@ class ActivityService implements ActivityServiceInterface
->orderBy(''.$goodsTable.'.created_at', 'DESC')
->get()->toArray();
}
public function allSpecialForAppletIndex($marketId)
{
$activity = [
'type' => '',
'settings' => '',
'goods' => []
];
$redis = ApplicationContext::getContainer()->get(Redis::class);
$activitySettings = $redis->hGetAll('activity_type_setting');
$activity['type'] = $type = $activitySettings['index_activity_type'];
$settingsStr = $activitySettings[$activity['type']] ?? '';
$activity['settings'] = json_decode($settingsStr, true);
$activity['settings'] = !empty($activity['settings']) ? $activity['settings'] : (object)[];
$activity['goods'] = [];
if ($activity['settings']['show_type'] == 'list') {
$storeTable = ApplicationContext::getContainer()->get(Store::class)->getTable();
$goodsTable = ApplicationContext::getContainer()->get(GoodsActivity::class)->getTable();
$builder = GoodsActivity::query()
->join($storeTable, ''.$storeTable.'.id', '=', ''.$goodsTable.'.store_id')
->with(['store'])
->where([''.$goodsTable.'.type' => $type])
->where(function ($query) use ($marketId, $goodsTable) {
$query->whereJsonContains(''.$goodsTable.'.market_ids', [(string)$marketId])
->orWhereJsonLength(''.$goodsTable.'.market_ids', '=', 0);
})
->where([''.$goodsTable.'.on_sale' => GoodsConstants::ON_SALE_YES])
// ->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])
->where([''.$storeTable.'.is_open' => \App\Constants\v3\Store::IS_OPEN_YES])
->where([''.$storeTable.'.is_rest' => \App\Constants\v3\Store::IS_REST_NO])
->where('time1', '<=', date('H:i'))
->where(function ($query) {
$query->where('time2', '>=', date('H:i'))
->orWhere('time4', '>=', date('H:i'));
})
->where(''.$goodsTable.'.expire_time', '>', time());
$builder = $builder->select(''.$goodsTable.'.*')->addSelect(''.$goodsTable.'.sales as total_sales')
->orderBy(''.$goodsTable.'.sort', 'DESC')
->orderBy(''.$goodsTable.'.expire_time', 'ASC')
->orderBy(''.$goodsTable.'.created_at', 'DESC');
if (is_array($activity['settings'])&&isset($activity['settings']['index_num_limit'])&&!empty($activity['settings']['index_num_limit'])) {
$builder = $builder->limit($activity['settings']['index_num_limit']);
}
$activity['goods'] = $builder->get()->toArray();
}
return $activity;
}
}

18
app/Service/v3/Implementations/OrderListService.php

@ -42,12 +42,17 @@ class OrderListService implements OrderListServiceInterface
// TODO: Implement undo() method.
}
public function onlineByUser($userId, $tab, $page=1, $pagesize=10)
public function onlineByUser($userId, $tab, $page=1, $pagesize=10, $lastId=0)
{
$builder = OrderMain::query()
->with(['orderGoods', 'market','employees'])
->where(['user_id' => $userId, 'type' => OrderType::ONLINE]);
if ($lastId) {
$builder = $builder->where('id', '<', $lastId);
}
switch ($tab) {
case 'all':
break;
@ -68,12 +73,12 @@ class OrderListService implements OrderListServiceInterface
// 清除badge
$this->badgeService->clearUserOrder($userId, $tab);
$paginate = $builder->orderBy('created_at', 'desc')->paginate($pagesize);
$paginate = $builder->orderBy('created_at', 'desc')->paginate($pagesize, ['*'], 'page', 1);
$orders = $paginate->toArray();
return ['has_more_pages' => $paginate->hasMorePages(), 'orders' => $orders['data'], 'note' => '待付款订单10分钟后将自动取消,请尽快支付!'];
}
public function onlineByStore($storeId, $tab, $page=1, $pagesize=10)
public function onlineByStore($storeId, $tab, $page=1, $pagesize=10, $lastId=0)
{
// $builder = Order::join('lanzu_order_main','lanzu_order.order_main_id','lanzu_order_main.global_order_id')
// ->select(
@ -99,6 +104,11 @@ class OrderListService implements OrderListServiceInterface
->with(['orderMain', 'orderGoods'])
->where(['store_id' => $storeId, ''.$mainTable.'.type' => OrderType::ONLINE])
->whereNull($mainTable.'.deleted_at');
if ($lastId) {
$builder = $builder->where('id', '<', $lastId);
}
switch ($tab) {
case 'all':
break;
@ -116,7 +126,7 @@ class OrderListService implements OrderListServiceInterface
break;
}
$paginate = $builder->orderBy(''.$mainTable.'.created_at', 'desc')->paginate($pagesize);
$paginate = $builder->orderBy(''.$mainTable.'.created_at', 'desc')->paginate($pagesize, ['*'], 'page', 1);
$orders = $paginate->toArray();
// $stateTxet = [

22
app/Service/v3/Implementations/ShareInfoService.php

@ -0,0 +1,22 @@
<?php
namespace App\Service\v3\Implementations;
use App\TaskWorker\SSDBTask;
use Hyperf\Redis\Redis;
use Hyperf\Utils\ApplicationContext;
class ShareInfoService implements \App\Service\v3\Interfaces\ShareInfoServiceInterface
{
public function getForApplet()
{
$redis = ApplicationContext::getContainer()->get(Redis::class);
$shareInfos = $redis->hGetAll('program_share_card');
$shareInfos = array_values($shareInfos);
array_walk($shareInfos, function (&$value, $key) {
$value = json_decode($value, true);
});
return $shareInfos?:[];
}
}

2
app/Service/v3/Implementations/UserInfoService.php

@ -84,7 +84,7 @@ class UserInfoService implements UserInfoServiceInterface
public function detail($userId)
{
return User::query()
->select(['id', 'nick_name', 'avatar', 'openid', 'total_score', 'real_name'])
->select(['id', 'nick_name', 'avatar', 'openid', 'unionid', 'total_score', 'real_name'])
->where(['status' => 1, 'id' => $userId])
->first()->toArray();
}

1
app/Service/v3/Interfaces/ActivityServiceInterface.php

@ -8,4 +8,5 @@ interface ActivityServiceInterface
public function check();
public function undo();
public function allForAppletIndex($type, $marketId);
public function allSpecialForAppletIndex($marketId);
}

4
app/Service/v3/Interfaces/OrderListServiceInterface.php

@ -7,8 +7,8 @@ interface OrderListServiceInterface
public function do();
public function check();
public function undo();
public function onlineByUser($userId, $tab, $page=1, $pagesize=10);
public function onlineByStore($storeId, $tab, $page, $pagesize);
public function onlineByUser($userId, $tab, $page=1, $pagesize=10, $lastId=0);
public function onlineByStore($storeId, $tab, $page, $pagesize, $lastId=0);
public function offlineByStore($storeId, $page, $pagesize,$startTime = '',$endTime = '');
public function offlineByUser($userId, $page=1, $pagesize=10);
}

8
app/Service/v3/Interfaces/ShareInfoServiceInterface.php

@ -0,0 +1,8 @@
<?php
namespace App\Service\v3\Interfaces;
interface ShareInfoServiceInterface
{
public function getForApplet();
}

1
config/autoload/dependencies.php

@ -92,4 +92,5 @@ return [
\App\Service\v3\Interfaces\ParamsTokenServiceInterface::class => \App\Service\v3\Implementations\ParamsTokenSsdbService::class,
\App\Service\v3\Interfaces\GoodsInventoryServiceInterface::class => \App\Service\v3\Implementations\GoodsInventoryService::class,
\App\Service\v3\Interfaces\HorsemanServiceInterface::class => \App\Service\v3\Implementations\HorsemanService::class,
\App\Service\v3\Interfaces\ShareInfoServiceInterface::class => \App\Service\v3\Implementations\ShareInfoService::class,
];
Loading…
Cancel
Save