zx/app/common/repositories/system/CountRepository.php

1533 lines
58 KiB
PHP

<?php
namespace app\common\repositories\system;
use AlibabaCloud\SDK\Dysmsapi\V20170525\Models\AddShortUrlResponseBody\data;
use app\common\repositories\BaseRepository;
use app\common\repositories\community\CommunityRepository;
use app\common\repositories\store\broadcast\BroadcastGoodsRepository;
use app\common\repositories\store\broadcast\BroadcastRoomRepository;
use app\common\repositories\system\notice\SystemNoticeLogRepository;
use app\common\repositories\store\order\{StoreOrderProductRepository,
StoreOrderReceiptRepository,
StoreOrderRepository,
StoreRefundOrderRepository
};
use app\common\repositories\store\product\{ProductAssistRepository,
ProductGroupRepository,
ProductPresellRepository,
ProductReplyRepository,
ProductRepository
};
use app\common\repositories\system\financial\FinancialRepository;
use app\common\repositories\system\merchant\{
MerchantIntentionRepository,
MerchantRepository
};
use app\common\repositories\user\{
FeedbackRepository,
UserExtractRepository
};
use think\facade\Cache;
class CountRepository extends BaseRepository
{
const CACHE_KEY = 'sys_count';
protected $is_cache = true;
protected $cache_method = [
'getMerchantSalesTop',
'getMerchantSalesPriceTop',
'getMerchantProductSalesPriceTop'
];
/**
* @param $type
* @param $callback
* @return mixed
* @throws \Exception
*
* @date 2023/10/21
* @author yyw
*/
protected function cache($type, $callback)
{
if (!$this->is_cache || !in_array($type, $this->cache_method) || env('APP_DEBUG', false)) {
return $callback();
}
$res = Cache::get(self::CACHE_KEY . '_' . $type);
if ($res) {
return json_decode($res, true);
} else {
$res = $callback();
Cache::set(self::CACHE_KEY . '_' . $type, json_encode($res), $res['ttl'] ?? 300);
return $res;
}
}
/**
* 删除为空数组项
* @param array $data
* @return array
*
* @date 2023/10/25
* @author yyw
*/
public function deleteArrayEmpty(array $data): array
{
foreach ($data as $key => $item) {
if (empty($item)) {
unset($data[$key]);
}
}
return array_values($data);
}
/**
* 获取平台首页统计
* @return array
*
* @date 2023/10/21
* @author yyw
*/
public function getAdminCount()
{
return $this->deleteArrayEmpty(array_merge(
$this->getAuditProductCount(),
// $this->getAuditActiveProductCount(),
$this->getAuditDistributionInfo(null),
$this->getAuditMerchantCount(),
$this->getAuditExtractCount(),
$this->getAuditFinancialCount(),
$this->getAuditCommunityCount(),
$this->getAuditRefundOrderCount(),
$this->getAuditFeedbackCount(),
$this->getIntegralOrderShipInfo()
));
}
/**
* 获取平台代办
* @return array
*
* @date 2023/10/25
* @author yyw
*/
public function getAdminTodo()
{
return $this->deleteArrayEmpty(array_merge(
$this->getAuditProductCount('todo'),
$this->getAuditDistributionInfo(null, 'todo'),
$this->getAuditExtractCount('todo'),
$this->getAuditFinancialCount('todo'),
$this->getAuditMerchantCount('todo'),
$this->getAuditCommunityCount('todo'),
$this->getAuditFeedbackCount('todo'),
// $this->getAuditActiveProductCount('todo'),
$this->getAuditLiveRoomCount('todo'),
$this->getAuditLiveProdouctCount('todo'),
$this->getIntegralOrderShipInfo('todo')
));
}
/**
* 获取去待审核的普通商品数量
* @return mixed
*
* @date 2023/10/21
* @author yyw
*/
public function getAuditProductCount(string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($type) {
$productRepository = app()->make(ProductRepository::class);
$normal_count = $productRepository->search(null, $productRepository->switchType(6, null, 0))->count();
$seckill_count = $productRepository->search(null, $productRepository->switchType(6, null, 1))->count();
$group_count = app()->make(ProductGroupRepository::class)->search(['product_status' => 0])->count();
$presell_count = app()->make(ProductPresellRepository::class)->search(['product_status' => 0])->count();
$assist_count = app()->make(ProductAssistRepository::class)->search(['product_status' => 0])->count();
$normal_path = '/admin/product/examine';
$seckill_path = '/admin/marketing/seckill/list';
$group_path = '/admin/marketing/combination/combination_goods?product_status=0';
$presell_path = '/admin/marketing/presell/list?product_status=0';
$assist_path = '/admin/marketing/assist/goods_list?product_status=0';
$data = [];
switch ($type) {
case 'count':
$children = [];
if ($normal_count > 0) {
$children[] = [
'title' => '普通商品',
'path' => $normal_path,
'count' => $normal_count,
'message' => '普通商品(' . $normal_count . ')',
];
}
if ($seckill_count > 0) {
$children[] = [
'title' => '秒杀商品',
'path' => $seckill_path,
'count' => $seckill_count,
'message' => '秒杀商品(' . $seckill_count . ')',
];
}
if ($group_count > 0) {
$children[] = [
'title' => '拼团商品',
'path' => $group_path,
'count' => $group_count,
'message' => '拼团商品(' . $group_count . ')',
];
}
if ($presell_count > 0) {
$children[] = [
'title' => '预售商品',
'path' => $presell_path,
'count' => $presell_count,
'message' => '预售商品(' . $presell_count . ')',
];
}
if ($assist_count > 0) {
$children[] = [
'title' => '助力商品',
'path' => $assist_path,
'count' => $assist_count,
'message' => '助力商品(' . $assist_count . ')',
];
}
$count = 0;
foreach ($children as $child) {
$count += $child['count'];
}
$data[] = [
'title' => '待审核商品',
'icon' => 'iconputongshangpin',
'path' => '/',
'count' => $count,
'children' => $children
];
break;
case 'todo':
if ($normal_count > 0) {
$data[] = [
'title' => '待审核普通商品提醒',
'path' => $normal_path,
'message' => '您有' . $normal_count . '个商品待审核'
];
}
if ($seckill_count > 0) {
$data[] = [
'title' => '待审核秒杀商品提醒',
'path' => $seckill_path,
'message' => '您有' . $seckill_count . '个秒杀商品待审核'
];
}
if ($group_count > 0) {
$data[] = [
'title' => '待审核拼团商品提醒',
'path' => $group_path,
'message' => '您有' . $group_count . '个拼团商品待审核'
];
}
if ($assist_count > 0) {
$data[] = [
'title' => '待审核助力商品提醒',
'path' => $assist_path,
'message' => '您有' . $assist_count . '个助力商品待审核'
];
}
if ($presell_count > 0) {
$data[] = [
'title' => '待审核预售商品提醒',
'path' => $presell_path,
'message' => '您有' . $presell_count . '个预售商品待审核'
];
}
break;
}
return $data;
});
}
/**
* 获取活动商品待审核数量
* @return array
*
* @date 2023/10/21
* @author yyw
*/
public function getAuditActiveProductCount(string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($type) {
$productRepository = app()->make(ProductRepository::class);
$seckill_count = $productRepository->search(null, $productRepository->switchType(6, null, 1))->count();
$group_count = app()->make(ProductGroupRepository::class)->search(['product_status' => 0])->count();
$presell_count = app()->make(ProductPresellRepository::class)->search(['product_status' => 0])->count();
$assist_count = app()->make(ProductAssistRepository::class)->search(['product_status' => 0])->count();
$seckill_path = '/admin/marketing/seckill/list';
$group_path = '/admin/marketing/combination/combination_goods?product_status=0';
$presell_path = '/admin/marketing/presell/list?product_status=0';
$assist_path = '/admin/marketing/assist/goods_list?product_status=0';
$data = [];
switch ($type) {
case 'count':
$children = [];
if ($seckill_count > 0) {
$children[] = [
'title' => '秒杀',
'path' => $seckill_path,
'count' => $seckill_count,
'message' => '秒杀(' . $seckill_count . ')',
];
}
if ($group_count > 0) {
$children[] = [
'title' => '拼团',
'path' => $group_path,
'count' => $group_count,
'message' => '拼团(' . $group_count . ')',
];
}
if ($presell_count > 0) {
$children[] = [
'title' => '预售',
'path' => $presell_path,
'count' => $presell_count,
'message' => '预售(' . $presell_count . ')',
];
}
if ($assist_count > 0) {
$children[] = [
'title' => '助力',
'path' => $assist_path,
'count' => $assist_count,
'message' => '助力(' . $assist_count . ')',
];
}
$count = 0;
foreach ($children as $child) {
$count += $child['count'];
}
$data[] = [
'title' => '待审核活动商品',
'icon' => 'iconhuodongshangpin',
'path' => '/',
'count' => $count,
'children' => $children
];
break;
case 'todo':
if ($seckill_count > 0) {
$data[] = [
'title' => '待审核秒杀商品提醒',
'path' => $seckill_path,
'message' => '您有' . $seckill_count . '个秒杀商品待审核'
];
}
if ($group_count > 0) {
$data[] = [
'title' => '待审核拼团商品提醒',
'path' => $group_path,
'message' => '您有' . $group_count . '个拼团商品待审核'
];
}
if ($assist_count > 0) {
$data[] = [
'title' => '待审核助力商品提醒',
'path' => $assist_path,
'message' => '您有' . $assist_count . '个助力商品待审核'
];
}
if ($presell_count > 0) {
$data[] = [
'title' => '待审核预售商品提醒',
'path' => $presell_path,
'message' => '您有' . $presell_count . '个预售商品待审核'
];
}
break;
}
return $data;
});
}
/**
* 获取分销商品待审核数量
* @param int|null $mer_id
* @param string $type
* @return mixed
* @throws \Exception
*
* @date 2023/10/25
* @author yyw
*/
public function getAuditDistributionInfo(?int $mer_id, string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($mer_id, $type) {
$productRepository = app()->make(ProductRepository::class);
$count = $productRepository->search($mer_id, $productRepository->switchType(6, null, 10))->count();
$path = '/admin/promoter/gift?type=6';
if ($mer_id) {
$path = '/merchant/product/list?type=6&is_gift_bag=1';
}
$data = [];
switch ($type) {
case 'count':
$data[] = [
'title' => empty($mer_id) ? '待审核分销礼包' : '审核未通过分销礼包',
'icon' => 'icondaihexiao-fenxiaolibao',
'path' => $path,
'count' => $count,
'children' => []
];
break;
case 'todo':
if ($count > 0) {
$data[] = [
'title' => empty($mer_id) ? '待审核分销礼包提醒' : '分销礼包审核未通过提醒',
'path' => $path,
'message' => '您有' . $count . (empty($mer_id) ? '个分销礼包待审核' : '个分销礼包审核未通过')
];
}
break;
}
return $data;
});
}
/**
* 获取商户审核
* @return array
*
* @date 2023/10/21
* @author yyw
*/
public function getAuditMerchantCount(string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($type) {
$merchantIntentionRepository = app()->make(MerchantIntentionRepository::class);
$count = $merchantIntentionRepository->search(['status' => 0])->count();
$path = '/admin/merchant/application';
$data = [];
switch ($type) {
case 'count':
$data[] = [
'title' => '待审核商户入驻',
'icon' => 'icondaishenhe-shanghuruzhu',
'path' => $path,
'count' => $count,
'children' => []
];
break;
case 'todo':
if ($count > 0) {
$data[] = [
'title' => '待审核商户入驻提醒',
'path' => $path,
'message' => '您有' . $count . '个商户入驻待审核'
];
}
break;
}
return $data;
});
}
/**
* 获取提现待审核
* @return array
*
* @date 2023/10/21
* @author yyw
*/
public function getAuditExtractCount(string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($type) {
$userExtractRepository = app()->make(UserExtractRepository::class);
$count = $userExtractRepository->search(['status' => 0])->count();
$path = '/admin/accounts/extract';
$data = [];
switch ($type) {
case 'count':
$data[] = [
'title' => '待审核提现',
'icon' => 'icondaishenhe-tixian',
'path' => $path,
'count' => $count,
'children' => []
];
break;
case 'todo':
if ($count > 0) {
$data[] = [
'title' => '待审核提现提醒',
'path' => $path,
'message' => '您有' . $count . '个提现待审核'
];
}
break;
}
return $data;
});
}
/**
* 获取转账待审核
* @return array
*
* @date 2023/10/21
* @author yyw
*/
public function getAuditFinancialCount(string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($type) {
$financialRepository = app()->make(FinancialRepository::class);
$count = $financialRepository->search(['status' => 0])->count();
$path = '/admin/accounts/transferRecord';
$data = [];
switch ($type) {
case 'count':
$data[] = [
'title' => '待审核转账',
'icon' => 'icondaishenhe-zhuanzhang',
'path' => $path,
'count' => $count,
'children' => []
];
break;
case 'todo':
if ($count > 0) {
$data[] = [
'title' => '待审核转账提醒',
'path' => $path,
'message' => '您有' . $count . '个转账待审核'
];
}
break;
}
return $data;
});
}
/**
* 待审核社区内容
* @return array
*
* @date 2023/10/21
* @author yyw
*/
public function getAuditCommunityCount(string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($type) {
$communityRepository = app()->make(CommunityRepository::class);
$count = $communityRepository->search(['status' => 0])->count();
$path = '/admin/community/list';
$data = [];
switch ($type) {
case 'count':
$data[] = [
'title' => '待审核社区内容',
'icon' => 'icondaishenhe-shequneirong',
'path' => $path,
'count' => $count,
'children' => []
];
break;
case 'todo':
if ($count > 0) {
$data[] = [
'title' => '待审核社区内容提醒',
'path' => $path,
'message' => '您有' . $count . '个社区内容待审核'
];
}
break;
}
return $data;
});
}
/**
* 待退款订单
* @return array
*
* @date 2023/10/21
* @author yyw
*/
public function getAuditRefundOrderCount(string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($type) {
$storeRefundOrderRepository = app()->make(StoreRefundOrderRepository::class);
$count = $storeRefundOrderRepository->search(['status' => 0])->count();
$path = '/admin/order/refund';
$data = [];
switch ($type) {
case 'count':
$data[] = [
'title' => '待退款订单',
'icon' => 'icondaituikuan',
'path' => $path,
'count' => $count,
'children' => []
];
break;
case 'todo':
if ($count > 0) {
$data[] = [
'title' => '待退款订单提醒',
'path' => $path,
'message' => '您有' . $count . '个待退款订单待审核'
];
}
break;
}
return $data;
});
}
/**
* 待处理用户反馈
* @return array
*
* @date 2023/10/21
* @author yyw
*/
public function getAuditFeedbackCount(string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($type) {
$feedbackRepository = app()->make(FeedbackRepository::class);
$count = $feedbackRepository->search(['status' => 0])->count();
$path = '/admin/feedback/list';
$data = [];
switch ($type) {
case 'count':
$data[] = [
'title' => '待处理用户反馈',
'icon' => 'icondaichuli-yonghufankui',
'path' => $path,
'count' => $count,
'children' => []
];
break;
case 'todo':
if ($count > 0) {
$data[] = [
'title' => '待处理用户反馈提醒',
'path' => $path,
'message' => '您有' . $count . '个用户反馈待处理'
];
}
break;
}
return $data;
});
}
/**
* 待处理直播间审核
* @return array
*
* @date 2023/10/21
* @author yyw
*/
public function getAuditLiveRoomCount(string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($type) {
$count = app()->make(BroadcastRoomRepository::class)->search(['status_tag' => 0])->count();
$path = '/admin/marketing/studio/list';
$data = [];
switch ($type) {
case 'count':
$data[] = [
'title' => '待审核直播间',
'icon' => '',
'path' => $path,
'count' => $count,
'children' => []
];
break;
case 'todo':
if ($count > 0) {
$data[] = [
'title' => '待审核直播间提醒',
'path' => $path,
'message' => '您有' . $count . '个直播间待审核'
];
}
break;
}
return $data;
});
}
/**
* 待处理直播商品审核
* @return array
*
* @date 2023/10/21
* @author yyw
*/
public function getAuditLiveProdouctCount(string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($type) {
$count = app()->make(BroadcastGoodsRepository::class)->search(['status_tag' => 0])->count();
$path = '/admin/marketing/broadcast/list';
$data = [];
switch ($type) {
case 'count':
$data[] = [
'title' => '待审核直播商品',
'icon' => '',
'path' => $path,
'count' => $count,
'children' => []
];
break;
case 'todo':
if ($count > 0) {
$data[] = [
'title' => '待审核直播商品提醒',
'path' => $path,
'message' => '您有' . $count . '个直播商品待审核'
];
}
break;
}
return $data;
});
}
/**
* 待发货积分订单订单
* @param string $type
* @return mixed
* @throws \Exception
*
* @date 2023/11/02
* @author yyw
*/
public function getIntegralOrderShipInfo(string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($type) {
$storeOrderRepository = app()->make(StoreOrderRepository::class);
$stay_delivery_count = $storeOrderRepository->searchAll(['status' => 0, 'activity_type' => 20], 0, 1)->count();
$stay_delivery_path = '/admin/marketing/integral/orderList?status=0';
$data = [];
switch ($type) {
case 'count':
$data[] = [
'title' => '待发货积分订单',
'icon' => 'icondaifahuo-jifen',
'path' => $stay_delivery_path,
'count' => $stay_delivery_count,
'children' => []
];
break;
case 'todo':
if ($stay_delivery_count) {
$data[] = [
'title' => '待发货积分订单提醒',
'path' => $stay_delivery_path,
'message' => '您有' . $stay_delivery_count . '个待发货的积分订单'
];
}
break;
}
return $data;
});
}
/**
* 获取商户排行榜
* @param string $date
* @param string $type
* @param string $sort
* @return mixed
* @throws \Exception
*/
public function getMerchantTop(string $date, string $type = 'sales', string $sort = 'desc')
{
return $this->cache(__FUNCTION__, function () use ($date, $type, $sort) {
$storeOrderRepository = app()->make(StoreOrderRepository::class);
$list = $storeOrderRepository->getMerchantTop($date, $type, $sort);
foreach ($list as &$item) {
$item['mer_name'] = $item['merchant']['mer_name'] ?? '未知商户';
$item['mer_avatar'] = $item['merchant']['mer_avatar'] ?? rtrim(systemConfig('site_url'), '/') . '/static/images/mer_logo.png';
unset($item['merchant']);
}
return compact('list');
});
}
/**
* 获取商户首页统计
* @param int $mer_id
* @return array
* @throws \Exception
*/
public function getMerchantCount(int $mer_id)
{
return $this->deleteArrayEmpty(array_merge(
$this->getMerchantOrderShipInfo($mer_id),
$this->getMerchantRefuseProductInfo($mer_id),
// $this->getMerchantActivityProductInfo($mer_id),
$this->getMerchantPendWriteOffOrderInfo($mer_id),
$this->getMerchantAlertProductInfo($mer_id),
$this->getMerchantSellOutProductInfo($mer_id),
$this->getMerchantRefundOrderInfo($mer_id),
$this->getMerchantOrderReceiptInfo($mer_id),
$this->getMerchantSellProductInfo($mer_id),
$this->getMerchantStayReviewsInfo($mer_id)
// $this->getAuditDistributionInfo($mer_id)
));
}
/**
* 获取商户小铃铛代办
* @param int $mer_id
* @return array
* @throws \Exception
*/
public function getMerchantTodo(int $mer_id)
{
return $this->deleteArrayEmpty(array_merge(
$this->getMerchantOrderShipInfo($mer_id, 'todo'),
$this->getMerchantRefuseProductInfo($mer_id, 'todo'),
// $this->getMerchantActivityProductInfo($mer_id, 'todo'),
$this->getMerchantPendWriteOffOrderInfo($mer_id, 'todo'),
$this->getMerchantAlertProductInfo($mer_id, 'todo'),
$this->getMerchantSellOutProductInfo($mer_id, 'todo'),
$this->getMerchantRefundOrderInfo($mer_id, 'todo'),
$this->getMerchantOrderReceiptInfo($mer_id, 'todo'),
$this->getMerchantStayReviewsInfo($mer_id, 'todo')
// $this->getAuditDistributionInfo($mer_id, 'todo')
));
}
/**
* 出售商品
* @param int $mer_id
* @param string $type
* @return mixed
* @throws \Exception
*
* @date 2023/11/02
* @author yyw
*/
public function getMerchantSellProductInfo(int $mer_id, string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($mer_id, $type) {
$productRepository = app()->make(ProductRepository::class);
$data = [];
$productType = 0;
$sell_count = $productRepository->search($mer_id, $productRepository->switchType(1, $mer_id, $productType))->count();
$sell_path = '/merchant/product/list?type=1';
switch ($type) {
case 'count':
$data[] = [
'title' => '出售商品',
'icon' => 'iconzaishoushangpin',
'path' => $sell_path,
'count' => $sell_count,
'children' => []
];
break;
case 'todo':
break;
}
return $data;
});
}
/**
* 售罄商品
* @param int $mer_id
* @param string $type
* @return mixed
* @throws \Exception
*
* @date 2023/11/02
* @author yyw
*/
public function getMerchantSellOutProductInfo(int $mer_id, string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($mer_id, $type) {
$productRepository = app()->make(ProductRepository::class);
$data = [];
$productType = 0;
$sell_out_count = $productRepository->search($mer_id, $productRepository->switchType(3, $mer_id, $productType))->count();
$sell_out_path = '/merchant/product/list?type=3';
switch ($type) {
case 'count':
$data[] = [
'title' => '售罄商品',
'icon' => 'iconshouqingshangpin',
'path' => $sell_out_path,
'count' => $sell_out_count,
'children' => []
];
break;
case 'todo':
if ($sell_out_count > 0) {
$data[] = [
'title' => '已售罄商品提醒',
'path' => $sell_out_path,
'message' => '您有' . $sell_out_count . '个商品已售罄'
];
}
break;
}
return $data;
});
}
/**
* 警戒库存商品
* @param int $mer_id
* @param string $type
* @return mixed
* @throws \Exception
*
* @date 2023/11/02
* @author yyw
*/
public function getMerchantAlertProductInfo(int $mer_id, string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($mer_id, $type) {
$productRepository = app()->make(ProductRepository::class);
$data = [];
$productType = 0;
$alert_count = $productRepository->search($mer_id, $productRepository->switchType(4, $mer_id, $productType))->count();
$alert_path = '/merchant/product/list?type=4';
switch ($type) {
case 'count':
$data[] = [
'title' => '警戒库存商品',
'icon' => 'iconjingjiekucun',
'path' => $alert_path,
'count' => $alert_count,
'children' => []
];
break;
case 'todo':
if ($alert_count) {
$data[] = [
'title' => '警戒库存商品提醒',
'path' => $alert_path,
'message' => '您有' . $alert_count . '个商品已售罄'
];
}
break;
}
return $data;
});
}
/**
* 审核未通过普通商品
* @param int $mer_id
* @param string $type
* @return array
*
* @date 2023/10/25
* @author yyw
*/
public function getMerchantRefuseProductInfo(int $mer_id, string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($mer_id, $type) {
$productRepository = app()->make(ProductRepository::class);
$data = [];
// 普通商品
$refuse_count = $productRepository->search($mer_id, $productRepository->switchType(7, $mer_id, 0))->count();
// 审核未通过活动商品
$seckill_count = $productRepository->search($mer_id, $productRepository->switchType(7, null, 1))->count();
$group_count = app()->make(ProductGroupRepository::class)->search(['mer_id' => $mer_id, 'product_status' => -1])->count();
$presell_count = app()->make(ProductPresellRepository::class)->search(['mer_id' => $mer_id, 'product_status' => -1])->count();
$assist_count = app()->make(ProductAssistRepository::class)->search(['mer_id' => $mer_id, 'product_status' => -1])->count();
$live_room_count = app()->make(BroadcastRoomRepository::class)->search(['mer_id' => $mer_id, 'status_tag' => -1])->count();
$live_goods_count = app()->make(BroadcastGoodsRepository::class)->search(['mer_id' => $mer_id, 'status_tag' => -1])->count();
// 分销礼包
$distribution_count = $productRepository->search($mer_id, $productRepository->switchType(6, null, 10))->count();
$refuse_path = '/merchant/product/list?type=7';
$seckill_path = '/merchant/marketing/seckill/product/list?type=-1';
$group_path = '/merchant/marketing/combination/combination_goods?product_status=-1';
$presell_path = '/merchant/marketing/presell/list?product_status=-1';
$assist_path = '/merchant/marketing/assist/list?product_status=-1';
$live_room_path = '/merchant/marketing/studio/list?status_tag=-1';
$live_goods_path = '/merchant/marketing/broadcast/list?status_tag=-1';
$distribution_path = '/merchant/product/list?type=6&is_gift_bag=1';
switch ($type) {
case 'count':
$children = [];
if ($refuse_count > 0) {
$children[] = [
'title' => '普通商品',
'path' => $refuse_path,
'count' => $refuse_count,
'message' => '普通商品(' . $refuse_count . ')',
];
}
if ($seckill_count > 0) {
$children[] = [
'title' => '秒杀',
'path' => $seckill_path,
'count' => $seckill_count,
'message' => '秒杀(' . $seckill_count . ')',
];
}
if ($group_count > 0) {
$children[] = [
'title' => '拼团',
'path' => $group_path,
'count' => $group_count,
'message' => '拼团(' . $group_count . ')',
];
}
if ($assist_count > 0) {
$children[] = [
'title' => '助力',
'path' => $assist_path,
'count' => $assist_count,
'message' => '助力(' . $assist_count . ')',
];
}
if ($presell_count > 0) {
$children[] = [
'title' => '预售',
'path' => $presell_path,
'count' => $presell_count,
'message' => '预售(' . $presell_count . ')',
];
}
if ($live_room_count > 0) {
$children[] = [
'title' => '直播间',
'path' => $live_room_path,
'count' => $live_room_count,
'message' => '直播间(' . $live_room_count . ')',
];
}
if ($live_goods_count > 0) {
$children[] = [
'title' => '直播间商品',
'path' => $live_goods_path,
'count' => $live_goods_count,
'message' => '直播间商品(' . $live_goods_count . ')',
];
}
if ($distribution_count > 0) {
$children[] = [
'title' => '分销礼包商品',
'path' => $distribution_path,
'count' => $distribution_count,
'message' => '分销礼包商品(' . $distribution_count . ')',
];
}
$count = 0;
foreach ($children as $child) {
$count += $child['count'];
}
$data[] = [
'title' => '审核未通过商品',
'icon' => 'iconputongshangpin',
'path' => '/',
'count' => $count,
'children' => $children
];
break;
case 'todo':
if ($refuse_count > 0) {
$data[] = [
'title' => '普通商品审核未通过提醒',
'path' => $refuse_path,
'message' => '您有' . $refuse_count . '个普通商品审核未通过'
];
}
if ($seckill_count > 0) {
$data[] = [
'title' => '秒杀商品审核未通过提醒',
'path' => $seckill_path,
'message' => '您有' . $seckill_count . '个秒杀商品审核未通过'
];
}
if ($group_count > 0) {
$data[] = [
'title' => '拼团商品审核未通过提醒',
'path' => $group_path,
'message' => '您有' . $group_count . '个拼团商品审核未通过'
];
}
if ($assist_count > 0) {
$data[] = [
'title' => '助力商品审核未通过提醒',
'path' => $assist_path,
'message' => '您有' . $assist_count . '个助力商品审核未通过'
];
}
if ($presell_count > 0) {
$data[] = [
'title' => '预售商品审核未通过提醒',
'path' => $presell_path,
'message' => '您有' . $presell_count . '个预售商品审核未通过'
];
}
if ($live_room_count > 0) {
$data[] = [
'title' => '直播商品审核未通过提醒',
'path' => $live_room_path,
'message' => '您有' . $live_room_count . '个直播商品审核未通过'
];
}
if ($live_goods_count > 0) {
$data[] = [
'title' => '直播间审核未通过提醒',
'path' => $live_goods_path,
'message' => '您有' . $live_goods_count . '个直播间审核未通过'
];
}
if ($distribution_count > 0) {
$data[] = [
'title' => '分销礼包审核未通过提醒',
'path' => $distribution_path,
'message' => '您有' . $distribution_count . '个分销礼包审核未通过'
];
}
break;
}
return $data;
});
}
public function getMerchantActivityProductInfo(int $mer_id, string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($mer_id, $type) {
$productRepository = app()->make(ProductRepository::class);
$seckill_count = $productRepository->search($mer_id, $productRepository->switchType(7, null, 1))->count();
$group_count = app()->make(ProductGroupRepository::class)->search(['mer_id' => $mer_id, 'product_status' => -1])->count();
$presell_count = app()->make(ProductPresellRepository::class)->search(['mer_id' => $mer_id, 'product_status' => -1])->count();
$assist_count = app()->make(ProductAssistRepository::class)->search(['mer_id' => $mer_id, 'product_status' => -1])->count();
$live_room_count = app()->make(BroadcastRoomRepository::class)->search(['mer_id' => $mer_id, 'status_tag' => -1])->count();
$live_goods_count = app()->make(BroadcastGoodsRepository::class)->search(['mer_id' => $mer_id, 'status_tag' => -1])->count();
$seckill_path = '/merchant/marketing/seckill/list?type=-1';
$group_path = '/merchant/marketing/combination/combination_goods?product_status=-1';
$presell_path = '/merchant/marketing/presell/list?product_status=-1';
$assist_path = '/merchant/marketing/assist/list?product_status=-1';
$live_room_path = '/merchant/marketing/studio/list?status_tag=-1';
$live_goods_path = '/merchant/marketing/broadcast/list?status_tag=-1';
$data = [];
switch ($type) {
case 'count':
$children = [];
if ($seckill_count > 0) {
$children[] = [
'title' => '秒杀',
'path' => $seckill_path,
'count' => $seckill_count,
'message' => '秒杀(' . $seckill_count . ')',
];
}
if ($group_count > 0) {
$children[] = [
'title' => '拼团',
'path' => $group_path,
'count' => $group_count,
'message' => '拼团(' . $group_count . ')',
];
}
if ($assist_count > 0) {
$children[] = [
'title' => '助力',
'path' => $assist_path,
'count' => $assist_count,
'message' => '助力(' . $assist_count . ')',
];
}
if ($presell_count > 0) {
$children[] = [
'title' => '预售',
'path' => $presell_path,
'count' => $presell_count,
'message' => '预售(' . $presell_count . ')',
];
}
if ($live_room_count > 0) {
$children[] = [
'title' => '直播间',
'path' => $live_room_path,
'count' => $live_room_count,
'message' => '直播间(' . $live_room_count . ')',
];
}
if ($live_goods_count > 0) {
$children[] = [
'title' => '直播间商品',
'path' => $live_goods_path,
'count' => $live_goods_count,
'message' => '直播间商品(' . $live_goods_count . ')',
];
}
$count = 0;
foreach ($children as $child) {
$count += $child['count'];
}
$data[] = [
'title' => '审核未通过活动商品',
'icon' => 'iconhuodongshangpin',
'path' => '/',
'count' => $count,
'children' => $children
];
break;
case 'todo':
if ($seckill_count > 0) {
$data[] = [
'title' => '秒杀商品审核未通过提醒',
'path' => $seckill_path,
'message' => '您有' . $seckill_count . '个秒杀商品审核未通过'
];
}
if ($group_count > 0) {
$data[] = [
'title' => '拼团商品审核未通过提醒',
'path' => $group_path,
'message' => '您有' . $group_count . '个拼团商品审核未通过'
];
}
if ($assist_count > 0) {
$data[] = [
'title' => '助力商品审核未通过提醒',
'path' => $assist_path,
'message' => '您有' . $assist_count . '个助力商品审核未通过'
];
}
if ($presell_count > 0) {
$data[] = [
'title' => '预售商品审核未通过提醒',
'path' => $presell_path,
'message' => '您有' . $presell_count . '个预售商品审核未通过'
];
}
if ($live_room_count > 0) {
$data[] = [
'title' => '直播商品审核未通过提醒',
'path' => $live_room_path,
'message' => '您有' . $live_room_count . '个直播商品审核未通过'
];
}
if ($live_goods_count > 0) {
$data[] = [
'title' => '直播间审核未通过提醒',
'path' => $live_goods_path,
'message' => '您有' . $live_goods_count . '个直播间审核未通过'
];
}
break;
}
return $data;
});
}
/**
* 待发货订单
* @param int $mer_id
* @param string $type
* @return mixed
* @throws \Exception
*
* @date 2023/11/02
* @author yyw
*/
public function getMerchantOrderShipInfo(int $mer_id, string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($mer_id, $type) {
$storeOrderRepository = app()->make(StoreOrderRepository::class);
$stay_delivery_count = $storeOrderRepository->search(['mer_id' => $mer_id])->where($storeOrderRepository->getOrderType(2))->count();
$stay_delivery_path = '/merchant/order/list?status=2';
$data = [];
switch ($type) {
case 'count':
$data[] = [
'title' => '待发货订单',
'icon' => 'icondaifahuo2',
'path' => $stay_delivery_path,
'count' => $stay_delivery_count,
'children' => []
];
break;
case 'todo':
if ($stay_delivery_count) {
$data[] = [
'title' => '待发货订单提醒',
'path' => $stay_delivery_path,
'message' => '您有' . $stay_delivery_count . '个待发货的订单'
];
}
break;
}
return $data;
});
}
/**
* 待核销订单
* @param int $mer_id
* @param string $type
* @return mixed
* @throws \Exception
*
* @date 2023/11/02
* @author yyw
*/
public function getMerchantPendWriteOffOrderInfo(int $mer_id, string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($mer_id, $type) {
$storeOrderRepository = app()->make(StoreOrderRepository::class);
$stay_cancel_count = $storeOrderRepository->search(['mer_id' => $mer_id, 'order_type' => 1, 'status' => 0, 'paid' => 1])->count();
$stay_cancel_path = '/merchant/order/list?order_type=1&type=1';
$data = [];
switch ($type) {
case 'count':
$data[] = [
'title' => '待核销订单',
'icon' => 'icondaihexiao',
'path' => $stay_cancel_path,
'count' => $stay_cancel_count,
'children' => []
];
break;
case 'todo':
if ($stay_cancel_count > 0) {
$data[] = [
'title' => '待核销订单提醒',
'path' => $stay_cancel_path,
'message' => '您有' . $stay_cancel_count . '个待核销的订单'
];
}
break;
}
return $data;
});
}
/**
* 待退款订单
* @param int $mer_id
* @param string $type
* @return mixed
* @throws \Exception
*
* @date 2023/10/25
* @author yyw
*/
public function getMerchantRefundOrderInfo(int $mer_id, string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($mer_id, $type) {
$storeRefundOrderRepository = app()->make(StoreRefundOrderRepository::class);
$stay_refund_count = $storeRefundOrderRepository->search(['mer_id' => $mer_id, 'status' => 0])->count();
$stay_refund_path = '/merchant/order/refund?status=0';
$data = [];
switch ($type) {
case 'count':
$data[] = [
'title' => '待退款订单',
'icon' => 'icondaituikuan',
'path' => $stay_refund_path,
'count' => $stay_refund_count,
'children' => []
];
break;
case 'todo':
if ($stay_refund_count > 0) {
$data[] = [
'title' => '待退款订单提醒',
'path' => $stay_refund_path,
'message' => '您有' . $stay_refund_count . '个待退款的订单'
];
}
break;
}
return $data;
});
}
/**
* 获取商户商品评论代办
* @param int $mer_id
* @param string $type
* @return mixed
* @throws \Exception
*
* @date 2023/10/25
* @author yyw
*/
public function getMerchantStayReviewsInfo(int $mer_id, string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($mer_id, $type) {
$productRepository = app()->make(ProductReplyRepository::class);
$count = $productRepository->searchJoinQuery(['mer_id' => $mer_id, 'is_reply' => 0, 'is_del' => 0])->count();
$path = '/merchant/product/reviews?is_reply=0';
$data = [];
switch ($type) {
case 'count':
$data[] = [
'title' => '待回复评论',
'icon' => 'icondaihuifu',
'path' => $path,
'count' => $count,
'children' => []
];
break;
case 'todo':
if ($count > 0) {
$data[] = [
'title' => '评论回复提醒',
'path' => $path,
'message' => '您有' . $count . '个评论待回复'
];
}
break;
}
return $data;
});
}
/**
* 获取开发票订单信息
* @param int $mer_id
* @param string $type
* @return mixed
* @throws \Exception
*
* @date 2023/10/25
* @author yyw
*/
public function getMerchantOrderReceiptInfo(int $mer_id, string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($mer_id, $type) {
$storeOrderReceiptRepository = app()->make(StoreOrderReceiptRepository::class);
$count = $storeOrderReceiptRepository->search(['mer_id' => $mer_id, 'status' => 0])->count();
$path = '/merchant/order/invoice?status=0';
$data = [];
switch ($type) {
case 'count':
$data[] = [
'title' => '待开发票',
'icon' => 'icondaikaipiao',
'path' => $path,
'count' => $count,
'children' => []
];
break;
case 'todo':
if ($count > 0) {
$data[] = [
'title' => '待开票订单提醒',
'path' => $path,
'message' => '您有' . $count . '个待开票的订单'
];
}
break;
}
return $data;
});
}
public function getMerchantNoticeInfo(int $mer_id, string $type = 'count')
{
return $this->cache(__FUNCTION__, function () use ($mer_id, $type) {
$systemNoticeLogRepository = app()->make(SystemNoticeLogRepository::class);
$count = $systemNoticeLogRepository->search(['mer_id' => $mer_id, 'is_read' => 0, 'is_del' => 0])->count();
$path = '/merchant/station/notice?is_read=0';
$data = [];
switch ($type) {
case 'count':
if ($count > 0) {
$data[] = [
'title' => '平台公告',
'icon' => '',
'path' => $path,
'count' => $count,
'children' => []
];
}
break;
case 'todo':
if ($count > 0) {
$data[] = [
'title' => '平台公告',
'path' => $path,
'message' => '您有' . $count . '条未读消息'
];
}
break;
}
return $data;
});
}
/**
* 获取商户商品销售金额排行
* @param string $date
* @return array
*
* @date 2023/10/21
* @author yyw
*/
public function getMerchantProductSalesPriceTop(int $mer_id, string $date)
{
return $this->cache(__FUNCTION__, function () use ($mer_id, $date) {
$storeOrderProductRepository = app()->make(StoreOrderProductRepository::class);
$list = $storeOrderProductRepository->getProductRate($mer_id, $date);
return compact('list');
});
}
}